Ithala leencwadi lePython β yiprojekthi yomthombo ovulekileyo yokwenza ngokuzenzekelayo usetyenziso lwe-GUI yedesktop kwi WindowsKwiminyaka emibini edlulileyo, yongeze iimpawu ezintsha eziphambili:
- Inkxaso yetekhnoloji ye-MS UI Automation. Ujongano luhlala lufana, kwaye ngoku luxhasa iWinForms, WPF, Qt5, Windows Ivenkile (UWP) njalo njalo - phantse yonke into ekhoyo Windows.
- Inkqubo yee-backends/plugins (okwangoku zimbini kuzo phantsi kwe-hood: engagqibekanga
"win32"entsha"uia"). Emva koko sihamba kakuhle ukuya kwi-cross-platform. - Win32 hook for mouse kunye nebhodi yezitshixo (izitshixo ezishushu emoyeni wepyHook).
Siza kunika isishwankathelo esifutshane sento ekhoyo kumthombo ovulekileyo we-desktop automation (ngaphandle kokuzenza ngathi uthelekiso olubi).
Eli nqaku liyinxenye yengxelo evela kwinkomfa ye-SQA Days 20 eMinsk ( ΠΈ ), inguqulelo yesiRashiya ngokuyinxenye yepywinauto.
- Iindlela ezisisiseko
- Ubuchwephesha bofikelelo kwidesktop
Masiqale ngombono omfutshane womthombo ovulekileyo kule ndawo. Kwidesktop GUI izicelo, yonke into intsonkothe ββngakumbi kunewebhu, eneSelenium. Nazi iindlela eziphambili:
Indlela yokulungelelanisa
Ikhowudi yonqakrazo amanqaku, sinethemba lokubetha ngempumelelo.
[+] Iqonga elinqamlezileyo, kulula ukulisebenzisa.
[+] Kulula "ukurekhoda-ukudlala kwakhona" ukurekhoda kovavanyo.
[-] Eyona nto ingazinzanga ekutshintsheni isisombululo sesikrini, umxholo, iifonti, ubungakanani befestile, njl.
[-] Iinzame ezinkulu zenkxaso ziyafuneka, kuhlala kulula ukuhlaziya iimvavanyo ukusuka ekuqaleni okanye ukuvavanya ngesandla.
[-] Izenzekela kuphela izenzo, kukho ezinye iindlela zokuqinisekisa kunye nokufumana idatha.
Izixhobo (iqonga elinqamlezileyo): , , kunye nabanye abaninzi. Ngokuqhelekileyo, izixhobo ezintsonkothileyo ziquka oku kusebenza (akusoloko kunqumla iqonga).
Kuyafaneleka ukuthetha ukuba indlela yokulungelelanisa inokuncedisana nezinye iindlela. Umzekelo, kwimizobo yesiko, ungacofa kwizinxulumanisi ezizalanayo (ukusuka kwikona ephezulu ngasekhohlo yefestile/isiqalelo, hayi ikhusi lonke) - oku kuhlala kuthembekile, ngakumbi ukuba uthathela ingqalelo ubude/ububanzi befestile. yonke into (emva koko izisombululo ezahlukeneyo zesikrini aziyi kulimaza).
Enye inketho: yabela umatshini omnye kuphela kunye nezicwangciso ezizinzile zokuvavanya (kungekhona i-cross-platform, kodwa kwezinye iimeko zilungile).
Ireferensi yokuqaphela umfanekiso
[+] Umnqamlezo-iqonga
[+-] Ithembekile ngokwentelekiso (ingcono kunendlela yokulungelelanisa), kodwa isafuna amaqhinga athile.
[-+] Ukucotha ngokomlinganiselo, kuba Ifuna izixhobo ze-CPU ukuqondwa algorithms.
[-] Ukuqwalaselwa kombhalo (OCR), njengomthetho, ngaphandle kombuzo => idatha yombhalo ayinakufunyanwa. Njengoko ndiyazi, izisombululo ze-OCR ezikhoyo azithembekanga kakhulu kulolu hlobo lomsebenzi, kwaye azisetyenziswanga ngokubanzi (wamkelekile kwizimvo ukuba oku akunjalo).
Izixhobo: , (I-Sikuli-iyahambelana, iPython esulungekileyo), .
Iteknoloji yokufikeleleka
[+] Eyona ndlela inokuthenjwa, kuba ikuvumela ukuba ukhangele ngokubhaliweyo, nokuba unikezelwa njani yinkqubo okanye isakhelo.
[+] Ikuvumela ukuba ukhuphe idatha yokubhaliweyo => kulula ukuqinisekisa iziphumo zovavanyo.
[+] Njengomthetho, ngokukhawuleza, kuba idla phantse akukho zixhobo ze-CPU.
[-] Kunzima ukwenza isixhobo esisebenza ngamaqonga ahlukeneyo: ngokuqinisekileyo onke amathala eencwadi avulelekileyo axhasa itekhnoloji enye okanye ezimbini zokufikelela. Windows/LinuxI-/MacOS ayixhaswa ngokupheleleyo ngumntu ngaphandle kwezo zihlawulelwayo ezifana neTestComplete, i-UFT okanye iSquish.
[-] Ubuchwephesha obunjalo abusoloko bufumaneka ngokomgaqo. Ngokomzekelo, ukuvavanya isikrini sokulayisha ngaphakathi kwe-VirtualBox-awukwazi ukwenza ngaphandle kokuqaphela umfanekiso. Kodwa kwiimeko ezininzi zakudala, indlela yokufikeleleka isasebenza. Oku kuya kuxutyushwa ngokubhekele phaya.
Izixhobo: kwi C#, kwi-C# (i-Selenium iyahambelana), kwi-C# (i-Appium iyahambelana), , (Iyahambelana ne-LDTP) , kwiRuby, (Linux iProjekthi yoVavanyo lweDesktop) kunye nayo Windows Π²Π΅ΡΡΠΈΡ .
I-LDTP mhlawumbi sesona sixhobo somthombo ovulekileyo weqonga (ngokuchanekileyo, usapho lwamathala eencwadi) esekwe kubuchwephesha bofikelelo. Nangona kunjalo, ayithandwa kakhulu. Andizange ndiyisebenzise ngokwam, kodwa ngokophononongo, i-interface yayo ayilona ifanelekileyo. Ukuba unempendulo eyakhayo, nceda wabelane ngayo kumazwana.
Uvavanyo lwasemva (a.k.a. ibhayisekile yangaphakathi)
Kwizicelo zeplatform, abaphuhlisi ngokwabo bahlala bedala indlela yangaphakathi yokuqinisekisa ukuvavanywa. Ngokomzekelo, benza iseva ye-TCP yenkonzo kwisicelo, iimvavanyo zixhuma kuyo kwaye zithumele imiyalelo yombhalo: yintoni onokuyicofa kuyo, apho ufumana khona idatha, njl. Uthembekile, kodwa hayi jikelele.
Ubuchwephesha bofikelelo kwidesktop
Good endala Win32 API
Uninzi Windows izicelo ezibhalwe ngaphambi kokuba i-WPF ikhutshwe nasemva kokuba Windows Ivenkile, zakhiwe ngandlela thile kwi-Win32 API. Oko kukuthi, i-MFC, i-WTL, i-C++ Builder, i-Delphi, i-VB6βzonke ezi zixhobo zisebenzisa i-Win32 API. Windows IiFomu zihambelana kakhulu neWin32 API.
Izixhobo: (efana neVB) kunye nePython wrapper , (ulwimi lwakho, kukho ujongano lwe-IDispatch COM), (Python) (Ruby) (Ruby).
Microsoft UI Automation
Eyona nzuzo iphambili: Itekhnoloji ye-MS UI Automation ixhasa uninzi lwezicelo ze-GUI kwi Windows Ngaphandle kweemeko ezingaqhelekanga. Ingxaki: akulula ukuyifunda kuneWin32 API. Ngaphandle koko, akukho mntu uza kuyila ii-wrappers zayo.
Ngapha koko, olu luseti lwendlela ye-COM ujongano (ikakhulu UIAutomationCore.dll), kwaye ine-.NET usonga ngendlela namespace System.Windows.Automation. Ngendlela, ine-bug eyaziswayo ngenxa yokuba ezinye izinto ze-UI zinokuphoswa. Ke ngoko, kungcono ukusebenzisa i-UIAutomationCore.dll ngokuthe ngqo (ukuba uve malunga ne-UiaComWrapper kwi-C#, yiyo ke le).
Iintlobo zojongano lweCOM:
(1) IUknown esisiseko - "ingcambu yabo bonke ububi". Elona nqanaba lisezantsi, alize lisebenziseke kakuhle.
(2) I-IDspatch kunye nezinto eziphuma kuyo (umz. Excel.Application), enokusetyenziswa kwiPython usebenzisa i-win32com.client package (ibandakanyiwe nepyWin32). Olona khetho lufanelekileyo kwaye luhle.
(3) I-interfaces yesiko ukuba iphakheji ye-Python yomntu wesithathu inokusebenza nayo .
Izixhobo: kwi C#, 0.6.0+, kwi C#, (ikhowudi yemvelaphi yabo ye-C wrappers ngaphezulu kwe-UIAutomationCore.dll ayichazwanga), kwiRuby.
AT-SPI
Nangona phantse zonke ii-axes zosapho Linux Yakhelwe kwi-X Window System (kwiFedora 25, u-"X" wathatyathelwa indawo yiWayland), u-"X" ukuvumela kuphela ukuba usebenzise iifestile eziphezulu kunye nemawusi/ikhibhodi. Ukuze ufumane uhlalutyo oluneenkcukacha lwamaqhosha, iibhokisi zoluhlu, njalo njalo, kukho itekhnoloji ye-AT-SPI. Abaphathi beefestile abadumileyo bane-daemon yobhaliso ebizwa ngokuba yi-AT-SPI, ebonelela nge-GUI ezenzekelayo kwizicelo (ubuncinane i-Qt kunye ne-GTK ziyaxhaswa).
Izixhobo: .
pyatspi2, ngokoluvo lwam, iqulathe ukuxhomekeka okuninzi njengePyGObject. Itekhnoloji ngokwayo iyafumaneka njengethala leencwadi eliguqukayo eliqhelekileyo libatspi.so. Kukho i Kwilayibrari ye-pywinauto, siceba ukusebenzisa inkxaso ye-AT-SPI ngale ndlela: ngokulayisha i-libatspi.so kunye nemodyuli ye-ctypes. Ingxaki encinci kuphela kukusebenzisa inguqulelo echanekileyo, njengoko zahlukile kancinci kwizicelo ze-GTK+ kunye ne-Qt. Ukukhululwa okunokwenzeka kwe-pywinauto 0.7.0 kuya kuba nenkxaso epheleleyo. Linux kunokulindeleka kwisiqingatha sokuqala sonyaka ka-2018.
Apple Accessibility API
IMacOS inolwimi lwayo oluzenzekelayo, iAppleScript. Ukuphumeza into efana nale kwiPython, kunjalo, kufuneka usebenzise imisebenzi evela kwi-ObjectiveC. Ukuqala, kubonakala ngathi, nge-MacOS 10.6, iphakheji ye-pyobjc ifakiwe kwiPython efakwe ngaphambili. Oku kuya kwenza kube lula ukudwelisa abaxhomekeke kwinkxaso yexesha elizayo kwipywinauto.
Izixhobo: Ukongeza kulwimi lwe-Apple Script, kuyafaneleka ukuba ubeke ingqalelo , aka pyatom. Lujongano oluhambelana ne-LDTP, kodwa ikwalithala leencwadi elizimeleyo. Ibe , ibhalwe ngumfundi wam. Kukho ingxaki eyaziwayo: amaxesha aguqukayo awasebenzi (iindlela waitFor*). Kodwa ngokubanzi, akukho nto imbi.
Ungaqalisa njani ngepywinauto
Inyathelo lokuqala kukuzixhobisa ngomhloli wezinto ze-GUI (into ebizwa ngokuba sisixhobo soHlolo). Kuya kukunceda ufunde isicelo ngaphakathi: indlela yolawulo lwezinto ezicwangcisiweyo, zeziphi iipropati ezikhoyo. Abona bahloli besiza abadumileyo:
- Intlola++ -ibandakanyiwe ne-Visual Studio, kuquka i-Express okanye i-Community Edition. Isebenzisa Win32 API. Umlingane wakhe uyaziwa Ulwazi lwefestile ye-AutoIt.
- Jonga.exe β ifakiwe kwi Windows I-SDK. Ukuba uyifakile, ikwi-64-bit Windows Ungayifumana kwifolda
C:Program Files (x86)Windows Kits<winver>binx64. Kumhloli ngokwawo kufuneka ukhethe imo UI Automation endaweni ye-MS AA (UkuFikelela okuSebenzayo, ukhokho we-UI Automation).
Emva kokuphonononga isicelo ngapha nangapha, sikhetha i-backend esiya kuyisebenzisa. Kwanele ukukhankanya igama le-backend xa usenza into yeSicelo.
- umva = "win32" - ngelixa isetyenziswa ngokungagqibekanga, isebenza kakuhle ne-MFC, i-WTL, i-VB6 kunye nezinye izicelo zelifa.
- umva = "uya" β i-backend entsha ye-MS UI Automation: isebenza kakuhle ne-WPF kunye ne-WinForms; ikwalungile nakwi-Delphi kunye Windows Ii-apps zeVenkile; isebenza neQt5 kunye nezinye ii-application zeJava. Kwaye ngokubanzi, ukuba i-Inspect.exe ibona izinto kunye neempawu zazo, ngoko ke le backend ifanelekile. Ngokusisiseko, uninzi lweebrowsers lukwaxhasa i-UI Automation (iMozilla ngokuzenzekelayo, kwaye iChrome ifuna utshintsho lomgca womyalelo xa iqaliswa).
--force-renderer-accessibilityukubona izinto kumaphepha kwi-Inspect.exe). Ngokuqinisekileyo, ukhuphiswano kunye neSelenium kule ndawo akunakwenzeka. Enye nje indlela yokusebenza kunye nesikhangeli (inokuba luncedo kwimeko yemveliso enqamlezileyo).
Amanqaku okungena kwi-automation
Isicelo siye saphandwa ngokubanzi. Lixesha lokwenza into yeSicelo kwaye uyiqhube okanye uncamathisele kwesele isebenza. Oku ayisiyonto nje ikloni yeklasi eqhelekileyo subprocess.Popen, echaza into yegalelo enqanda zonke izenzo zakho kwimida yenkqubo. Oku kuluncedo kakhulu ukuba iimeko ezininzi zesicelo ziyasebenza, kodwa awufuni ukubamba abanye.
from pywinauto.application import Application
app = Application(backend="uia").start('notepad.exe')
# ΠΠΏΠΈΡΠ΅ΠΌ ΠΎΠΊΠ½ΠΎ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Ρ
ΠΎΡΠΈΠΌ Π½Π°ΠΉΡΠΈ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Notepad.exe
dlg_spec = app.UntitledNotepad
# ΠΆΠ΄Π΅ΠΌ ΠΏΠΎΠΊΠ° ΠΎΠΊΠ½ΠΎ ΡΠ΅Π°Π»ΡΠ½ΠΎ ΠΏΠΎΡΠ²ΠΈΡΡΡ
actionable_dlg = dlg_spec.wait('visible')Ukuba ufuna ukulawula izicelo ezininzi ngexesha elinye, le klasi iya kukunceda Desktop. Umzekelo, kwikhaltyhuleyitha kuWin10, ulawulo lweziqalelo lusasazwe kwiinkqubo ezininzi (hayi kuphela calc.exe). Ngoko akukho nto Desktop ayonelanga.
from subprocess import Popen
from pywinauto import Desktop
Popen('calc.exe', shell=True)
dlg = Desktop(backend="uia").Calculator
dlg.wait('visible')Ingcambu yento (Application okanye Desktop) kukuphela kwendawo apho ufuna ukucacisa umva. Yonke enye into iwela ngokucacileyo kwingqikelelo ethi "specification->wrapper", eya kuxoxwa kamva.
Ifestile/IiNgcaciso zeSiqalelo
Lo ngumbono ongundoqo apho ujongano lwepywinauto lwakhiwe khona. Ungayichaza iwindow/isiqalelo ngokurhabaxa okanye kwiinkcukacha ezingaphezulu, nokuba ayikabikho okanye sele ivaliwe. Iinkcukacha zefestile (into WindowSpecification) igcina indlela yokukhangela ifestile yokwenyani okanye into.
Umzekelo wenkcazo yefestile eneenkcukacha:
>>> dlg_spec = app.window(title='Untitled - Notepad')
>>> dlg_spec
<pywinauto.application.WindowSpecification object at 0x0568B790>
>>> dlg_spec.wrapper_object()
<pywinauto.controls.win32_controls.DialogWrapper object at 0x05639B70>Ukukhangela kwefestile ngokwayo kwenzeka ngokubiza indlela .wrapper_object(). Ibuyisela "i-wrapper" ethile yefestile yokwenyani / into okanye ukujula ElementNotFoundError (ngamaxesha athile ElementAmbiguousError, ukuba izinto ezininzi zifunyenwe, oko kukuthi, kufuneka ucacise umlinganiselo wokukhangela). Le "wrapper" sele iyazi indlela yokwenza ezinye izenzo ngento okanye ukufumana idatha kuyo.
I-Python inokufihla umnxeba .wrapper_object(), ngoko ke ikhowudi yokugqibela iba mfutshane. Sincoma ukuyisebenzisela iinjongo zokulungisa kuphela. Imigca emibini elandelayo yenza kanye into enye:
dlg_spec.wrapper_object().minimize() # debugging
dlg_spec.minimize() # productionKukho iikhrayitheriya ezininzi zophendlo lwenkcazo yefestile. Nantsi imizekelo embalwa:
# ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠΎΠ²Π½Π΅ΠΉ
app.window(title_re='.* - Notepad$').window(class_name='Edit')
# ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΡΠΈΡΠ΅ΡΠΈΠΈ (ΠΊΠ°ΠΊ AND) ΠΈ Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
dlg = Desktop(backend="uia").Calculator
dlg.window(auto_id='num8Button', control_type='Button')Uluhlu lwazo zonke iikhrayitheriya ezinokwenzeka zikumaxwebhu omsebenzi .
Umlingo wofikelelo ngophawu kunye nesitshixo
I-Python yenza kube lula ukwenza iinkcukacha zefestile kwaye iqaphele iimpawu zento ngokuguquguqukayo (ngaphakathi, indlela ibhalwe ngaphezulu __getattribute__). Ngokuqinisekileyo, izithintelo ezifanayo zibekwe kwigama lempawu njengegama layo nayiphi na inguqu (awukwazi ukufaka izithuba, iikoma, okanye ezinye iimpawu ezikhethekileyo). Ngethamsanqa, i-pywinauto isebenzisa into ebizwa ngokuba "yimidlalo engcono kakhulu" yokukhangela i-algorithm echasene ne-typos kunye nokwahluka okuncinci.
app.UntitledNotepad
# ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ
app.window(best_match='UntitledNotepad')Ukuba usafuna imitya ye-Unicode (umzekelo, kulwimi lwesiRashiya), izithuba, njl., ungafikelela ngesitshixo (ngokungathi sisichazi-magama esiqhelekileyo):
app['Untitled - Notepad']
# ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ
app.window(best_match='Untitled - Notepad')Imithetho emihlanu yamagama omlingo
Ungawafumana njani amagama aqhelekileyo omlingo? Ezo zabelwe into phambi kokukhangela. Ukuba ukhankanye igama elifana ngokwaneleyo nomgangatho, ngoko ke into iya kufunyanwa.
- Ngesihloko (isicatshulwa, igama):
app.Properties.OK.click() - Ngokubhaliweyo nangohlobo lwesiqalelo:
app.Properties.OKButton.click() - Ngohlobo kunye nenombolo:
app.Properties.Button3.click()(amagamaButton0ΠΈButton1ibotshelelwe kwinto yokuqala efunyenweyo,Button2- ukuya kweyesibini, kwaye ngoko ngokulandelelana - yile ndlela eyenzeka ngayo ngokwembali) - Ngombhalo omileyo (ekhohlo okanye phezulu) nangohlobo:
app.OpenDialog.FileNameEdit.set_text("")(iluncedo kwizinto ezinombhalo oguqukayo) - Ngohlobo nangombhalo ongaphakathi:
app.Properties.TabControlSharing.select("General")
Ngokuqhelekileyo imithetho emibini okanye emithathu isetyenziswa ngexesha elinye, kunqabile ukuba ibe ngaphezulu. Ukujonga ukuba ngawaphi amagama akhoyo kwinto nganye, ungasebenzisa indlela print_control_identifiers(). Inokushicilela umthi wezinto zombini kwiscreen nakwifayile. Kwinto nganye, amagama alo omlingo ashicilelwe. Unokukopa kwaye uncamathisele iinkcukacha ezithe vetshe zezinto zomntwana ukusuka apho. Isiphumo kwiskripthi siya kujongeka ngolu hlobo:
app.Properties.child_window(data-gt-translate-attributes='["title"]' title="Contains:", auto_id="13087", control_type="Edit")Umthi wezinto ngokwawo udla ngokuba lilaphu leenyawo elikhulu.
>>> app.Properties.print_control_identifiers()
Control Identifiers:
Dialog - 'Windows NT Properties' (L688, T518, R1065, B1006)
[u'Windows NT PropertiesDialog', u'Dialog', u'Windows NT Properties']
child_window(data-gt-translate-attributes='["title"]' title="Windows NT Properties", control_type="Window")
|
| Image - '' (L717, T589, R749, B622)
| [u'', u'0', u'Image1', u'Image0', 'Image', u'1']
| child_window(auto_id="13057", control_type="Image")
|
| Image - '' (L717, T630, R1035, B632)
| ['Image2', u'2']
| child_window(auto_id="13095", control_type="Image")
|
| Edit - 'Folder name:' (L790, T596, R1036, B619)
| [u'3', 'Edit', u'Edit1', u'Edit0']
| child_window(data-gt-translate-attributes='["title"]' title="Folder name:", auto_id="13156", control_type="Edit")
|
| Static - 'Type:' (L717, T643, R780, B658)
| [u'Type:Static', u'Static', u'Static1', u'Static0', u'Type:']
| child_window(data-gt-translate-attributes='["title"]' title="Type:", auto_id="13080", control_type="Text")
|
| Edit - 'Type:' (L790, T643, R1036, B666)
| [u'4', 'Edit2', u'Type:Edit']
| child_window(data-gt-translate-attributes='["title"]' title="Type:", auto_id="13059", control_type="Edit")
|
| Static - 'Location:' (L717, T669, R780, B684)
| [u'Location:Static', u'Location:', u'Static2']
| child_window(data-gt-translate-attributes='["title"]' title="Location:", auto_id="13089", control_type="Text")
|
| Edit - 'Location:' (L790, T669, R1036, B692)
| ['Edit3', u'Location:Edit', u'5']
| child_window(data-gt-translate-attributes='["title"]' title="Location:", auto_id="13065", control_type="Edit")
|
| Static - 'Size:' (L717, T695, R780, B710)
| [u'Size:Static', u'Size:', u'Static3']
| child_window(data-gt-translate-attributes='["title"]' title="Size:", auto_id="13081", control_type="Text")
|
| Edit - 'Size:' (L790, T695, R1036, B718)
| ['Edit4', u'6', u'Size:Edit']
| child_window(data-gt-translate-attributes='["title"]' title="Size:", auto_id="13064", control_type="Edit")
|
| Static - 'Size on disk:' (L717, T721, R780, B736)
| [u'Size on disk:', u'Size on disk:Static', u'Static4']
| child_window(data-gt-translate-attributes='["title"]' title="Size on disk:", auto_id="13107", control_type="Text")
|
| Edit - 'Size on disk:' (L790, T721, R1036, B744)
| ['Edit5', u'7', u'Size on disk:Edit']
| child_window(data-gt-translate-attributes='["title"]' title="Size on disk:", auto_id="13106", control_type="Edit")
|
| Static - 'Contains:' (L717, T747, R780, B762)
| [u'Contains:1', u'Contains:0', u'Contains:Static', u'Static5', u'Contains:']
| child_window(data-gt-translate-attributes='["title"]' title="Contains:", auto_id="13088", control_type="Text")
|
| Edit - 'Contains:' (L790, T747, R1036, B770)
| [u'8', 'Edit6', u'Contains:Edit']
| child_window(data-gt-translate-attributes='["title"]' title="Contains:", auto_id="13087", control_type="Edit")
|
| Image - 'Contains:' (L717, T773, R1035, B775)
| [u'Contains:Image', 'Image3', u'Contains:2']
| child_window(data-gt-translate-attributes='["title"]' title="Contains:", auto_id="13096", control_type="Image")
|
| Static - 'Created:' (L717, T786, R780, B801)
| [u'Created:', u'Created:Static', u'Static6', u'Created:1', u'Created:0']
| child_window(data-gt-translate-attributes='["title"]' title="Created:", auto_id="13092", control_type="Text")
|
| Edit - 'Created:' (L790, T786, R1036, B809)
| [u'Created:Edit', 'Edit7', u'9']
| child_window(data-gt-translate-attributes='["title"]' title="Created:", auto_id="13072", control_type="Edit")
|
| Image - 'Created:' (L717, T812, R1035, B814)
| [u'Created:Image', 'Image4', u'Created:2']
| child_window(data-gt-translate-attributes='["title"]' title="Created:", auto_id="13097", control_type="Image")
|
| Static - 'Attributes:' (L717, T825, R780, B840)
| [u'Attributes:Static', u'Static7', u'Attributes:']
| child_window(data-gt-translate-attributes='["title"]' title="Attributes:", auto_id="13091", control_type="Text")
|
| CheckBox - 'Read-only (Only applies to files in folder)' (L790, T825, R1035, B841)
| [u'CheckBox0', u'CheckBox1', 'CheckBox', u'Read-only (Only applies to files in folder)CheckBox', u'Read-only (Only applies to files in folder)']
| child_window(data-gt-translate-attributes='["title"]' title="Read-only (Only applies to files in folder)", auto_id="13075", control_type="CheckBox")
|
| CheckBox - 'Hidden' (L790, T848, R865, B864)
| ['CheckBox2', u'HiddenCheckBox', u'Hidden']
| child_window(data-gt-translate-attributes='["title"]' title="Hidden", auto_id="13076", control_type="CheckBox")
|
| Button - 'Advanced...' (L930, T845, R1035, B868)
| [u'Advanced...', u'Advanced...Button', 'Button', u'Button1', u'Button0']
| child_window(data-gt-translate-attributes='["title"]' title="Advanced...", auto_id="13154", control_type="Button")
|
| Button - 'OK' (L814, T968, R889, B991)
| ['Button2', u'OK', u'OKButton']
| child_window(data-gt-translate-attributes='["title"]' title="OK", auto_id="1", control_type="Button")
|
| Button - 'Cancel' (L895, T968, R970, B991)
| ['Button3', u'CancelButton', u'Cancel']
| child_window(data-gt-translate-attributes='["title"]' title="Cancel", auto_id="2", control_type="Button")
|
| Button - 'Apply' (L976, T968, R1051, B991)
| ['Button4', u'ApplyButton', u'Apply']
| child_window(data-gt-translate-attributes='["title"]' title="Apply", auto_id="12321", control_type="Button")
|
| TabControl - '' (L702, T556, R1051, B962)
| [u'10', u'TabControlSharing', u'TabControlPrevious Versions', u'TabControlSecurity', u'TabControl', u'TabControlCustomize']
| child_window(auto_id="12320", control_type="Tab")
| |
| | TabItem - 'General' (L704, T558, R753, B576)
| | [u'GeneralTabItem', 'TabItem', u'General', u'TabItem0', u'TabItem1']
| | child_window(data-gt-translate-attributes='["title"]' title="General", control_type="TabItem")
| |
| | TabItem - 'Sharing' (L753, T558, R801, B576)
| | [u'Sharing', u'SharingTabItem', 'TabItem2']
| | child_window(data-gt-translate-attributes='["title"]' title="Sharing", control_type="TabItem")
| |
| | TabItem - 'Security' (L801, T558, R851, B576)
| | [u'Security', 'TabItem3', u'SecurityTabItem']
| | child_window(data-gt-translate-attributes='["title"]' title="Security", control_type="TabItem")
| |
| | TabItem - 'Previous Versions' (L851, T558, R947, B576)
| | [u'Previous VersionsTabItem', u'Previous Versions', 'TabItem4']
| | child_window(data-gt-translate-attributes='["title"]' title="Previous Versions", control_type="TabItem")
| |
| | TabItem - 'Customize' (L947, T558, R1007, B576)
| | [u'CustomizeTabItem', 'TabItem5', u'Customize']
| | child_window(data-gt-translate-attributes='["title"]' title="Customize", control_type="TabItem")
|
| TitleBar - 'None' (L712, T521, R1057, B549)
| ['TitleBar', u'11']
| |
| | Menu - 'System' (L696, T526, R718, B548)
| | [u'System0', u'System', u'System1', u'Menu', u'SystemMenu']
| | child_window(data-gt-translate-attributes='["title"]' title="System", auto_id="MenuBar", control_type="MenuBar")
| | |
| | | MenuItem - 'System' (L696, T526, R718, B548)
| | | [u'System2', u'MenuItem', u'SystemMenuItem']
| | | child_window(data-gt-translate-attributes='["title"]' title="System", control_type="MenuItem")
| |
| | Button - 'Close' (L1024, T519, R1058, B549)
| | [u'CloseButton', u'Close', 'Button5']
| | child_window(data-gt-translate-attributes='["title"]' title="Close", control_type="Button")Kwezinye iimeko, ukuprinta umthi wonke kunokucotha (umzekelo, kwi-iTunes kukho amawaka amathathu ezinto kwithebhu enye!), kodwa ungasebenzisa ukhetho. depth (ubunzulu): depth=1 -into ngokwayo, depth=2 - kuphela abantwana abasondeleyo, njalo njalo. Isenokuchazwa kwiinkcukacha xa udala child_window.
U mzekelo
Sihlala sigcwalisa . Phakathi kwezi zamva nje, kubalulekile ukuqaphela ukuba i-automation ye-WireShark network analyzer (lo ngumzekelo omhle wesicelo se-Qt5; nangona lo msebenzi unokusonjululwa ngaphandle kwe-GUI, kuba kukho scapy.Sniffer ukusuka kwiphakheji yePython ). Kukho nomzekelo we-MS Paint automation ene-Ribbon toolbar.
Omnye umzekelo omhle obhalwe ngumfundi wam: (iya kufudukela kwindawo yokugcina uvimba kancinane kamva).
Kwaye, kunjalo, umzekelo wokubhalisa kwikhibhodi (izitshixo ezishushu) kunye neziganeko zemouse:
.
Imibulelo
Umbulelo okhethekileyo kwabo bahlala bencedisa ukuphuhlisa iprojekthi. Kum kunye Le yinto yokuzonwabisa esisigxina. Abafundi bam ababini abavela kwi-UNN kutshanje bakhusele izidanga zabo zesidanga kwesi sihloko. yenza igalelo elikhulu ekuxhaseni i-MS UI Automation kwaye kutshanje iqalise ukwenza ikhowudi yejenereyitha ezenzekelayo esekelwe kumgaqo "wokudlala irekhodi" esekelwe kwiimpawu zesicatshulwa (le yeyona nto inzima kakhulu), ukuza kuthi ga ngoku kuphela "uia" umva. iphuhlisa i-backend entsha ye Linux isekelwe kwi-AT-SPI (iimodyuli mouse ΠΈ keyboard isekwe - sele kukukhutshwa 0.6.x).
Kuba bendifundisa ikhosi ekhethekileyo kwi-automation kwiPython ixesha elide, abanye abafundi benkosi benza umsebenzi wesikolo wasekhaya, baphumeza amanqaku amancinci okanye imizekelo yokuzenzela. Ezinye izinto eziphambili kwinqanaba lophando zikhe zavunjululwa ngabafundi. Nangona ngamanye amaxesha kufuneka ubeke esweni ngokungqongqo umgangatho wekhowudi. Abahlalutyi be-Static (i-QuantifiedCode, i-Codacy kunye ne-Landscape) kunye novavanyo oluzenzekelayo kwilifu (inkonzo ye-AppVeyor) kunye nekhowudi yokugubungela malunga ne-95% inceda kakhulu kule nto.
Kwakhona enkosi kuye wonke umntu oshiya uphononongo, ephakamisa iibugs kwaye athumele izicelo zokutsala!
Izibonelelo ezongezelelweyo
Silandela imibuzo (isandula ukuvela ) kunye . Kukho .
Sihlaziya rhoqo ngenyanga . Ngokwenani leenkwenkwezi kwi-GitHub, kuphela i-Autohotkey (banoluntu olukhulu kakhulu kunye nembali ende) kwaye i-PyAutoGUI ikhula ngokukhawuleza (ubukhulu becala ngenxa yokuthandwa kweencwadi ngumbhali wayo u-Al Sweigart: "Zizenzele izinto eziBoring nge Python" kunye nabanye).
umthombo: www.habr.com
