Tranomboky Python dia tetik'asa misokatra ho an'ny automatique ny fampiharana GUI desktop amin'ny Windows. Tao anatin'ny roa taona lasa, nisy endri-javatra lehibe vaovao niseho tao:
- Fanohanana ny teknolojia MS UI Automation. Ny interface dia mitovy, ary ankehitriny dia manohana: WinForms, WPF, Qt5, Windows Store (UWP) sy ny sisa - saika ny zavatra rehetra ao amin'ny Windows.
- Rafitra backends/plugins (amin'izao fotoana izao dia misy roa amin'izy ireo eo ambanin'ny kapa: default
"win32"ary vaovao"uia"). Avy eo dia mandroso tsara mankany amin'ny sehatra cross-platform isika. - Win32 hooks ho an'ny totozy sy fitendry (fanalahidy mafana amin'ny fanahin'ny pyHook).
Hanome topimaso fohy momba izay misy amin'ny loharano misokatra ho an'ny automation desktop ihany koa izahay (tsy misy fampitahana matotra).
Ity lahatsoratra ity dia ampahany amin'ny tatitra avy amin'ny fihaonambe SQA Days 20 tany Minsk ( ΠΈ ), ampahany amin'ny dikan-teny Rosiana ho an'ny pywinauto.
- Fomba fiasa fototra
- Teknolojian'ny fidirana amin'ny desktop fototra
Andeha isika hanomboka amin'ny topimaso fohy momba ny loharano misokatra amin'ity faritra ity. Ho an'ny fampiharana GUI desktop, ny zava-drehetra dia somary sarotra kokoa noho ny amin'ny tranonkala, izay misy Selenium. Ireto ny fomba fiasa lehibe:
Fomba fandrindrana
Hardcode ny teboka kitiho, manantena izahay fa hahita fahombiazana.
[+] Cross-platform, mora ampiharina.
[+] Mora ny manao βrecord-replayβ firaketana fitsapana.
[-] Ny tsy miovaova indrindra amin'ny fanovana ny famahana ny efijery, ny lohahevitra, ny endri-tsoratra, ny haben'ny varavarankely, sns.
[-] Ilaina ny ezaka fanohanana goavana;
[-] Manao automatique fotsiny ny hetsika;
Fitaovana (cross-platform): , , sy ny maro hafa. Amin'ny ankapobeny, ny fitaovana saro-pady kokoa dia ahitana an'io fampiasa io (tsy voatery miampita sehatra).
Tsara ny milaza fa ny fomba fandrindrana dia afaka mameno ny fomba fiasa hafa. Ohatra, ho an'ny sary mahazatra, azonao atao ny manindry ny koordinate havanana (avy amin'ny zoro ambony havia amin'ny varavarankely/singa, fa tsy ny efijery manontolo) - matetika azo itokisana izany, indrindra raha raisinao ny halavany / sakan'ny singa iray manontolo (dia tsy handratra ny famahana ny efijery samihafa).
Safidy iray hafa: omeo milina iray ihany miaraka amin'ny filaharana stable ho an'ny fitsapana (tsy cross-platform, fa amin'ny toe-javatra sasany dia tsara).
Famantarana sary reference
[+] Cross-platform[+-] Azo itokisana (tsara kokoa noho ny fomba fandrindrana), saingy mbola mila fitaka.
[-+] Somary miadana, satria Mitaky loharanon-karena CPU ho an'ny algorithma fantatra.
[-] Ny fanekena ny soratra (OCR), amin'ny ankapobeny, dia tsy misy fanontaniana => tsy azo alaina ny angona lahatsoratra. Raha ny fahalalako azy, ny vahaolana OCR efa misy dia tsy azo ianteherana loatra amin'ity karazana asa ity, ary tsy ampiasaina betsaka (tonga ao amin'ny fanehoan-kevitra raha tsy izany no izy).
fitaovana: , (Sikuli-mifanaraka, Python madio), .
Teknolojia fidirana
[+] Ny fomba azo antoka indrindra, satria mamela anao hikaroka amin'ny alΓ lan'ny lahatsoratra, na inona na inona adika amin'ny rafitra na rafitra.[+] Mamela anao haka angona lahatsoratra => mora kokoa ny manamarina ny valin'ny fitsapana.
[+] Toy ny fitsipika, ny haingana indrindra, satria saika tsy mandany loharanon-karena CPU.
[-] Sarotra ny manao fitaovana mifanandrify amin'ny sehatra: tena manohana teknolojia fidirana iray na roa ny tranomboky misokatra rehetra. Windows/Linux/MacOS dia tsy tohanan'iza na iza afa-tsy ny karama toa ny TestComplete, UFT na Squish.
[-] Ny teknolojia toy izany dia tsy azo ampiasaina amin'ny fitsipika. Ohatra, mizaha ny efijery fandefasana ao anaty VirtualBox - tsy azo atao izany raha tsy misy ny fanekena sary. Saingy amin'ny tranga mahazatra maro dia mbola azo ampiharina ny fomba fidirana. Hodinihina bebe kokoa izany.
fitaovana: amin'ny C#, amin'ny C# (Selenium compatible), amin'ny C# (Appium compatible), , (Mifanaraka amin'ny LDTP) , amin'ny Ruby, (Linux Desktop Testing Project) sy ny dikan-ny Windows .
LDTP angamba no hany fitaovana open-source cross-platform (ny marimarina kokoa, fianakavian'ny tranomboky) mifototra amin'ny teknolojian'ny fidirana. Tsy dia malaza loatra anefa izy io. Tsy nampiasa izany ny tenako, fa araka ny hevitra, ny interface tsara dia tsy mety indrindra. Raha manana hevitra tsara ianao dia zarao amin'ny fanehoan-kevitra.
Test backdoor (aka bisikileta anatiny)
Ho an'ny rindranasa cross-platform, ny mpamorona ny tenany dia mamorona mekanika anatiny mba hiantohana ny fahatsapan-tena. Ohatra, mamorona serivisy TCP serivisy ao amin'ny fampiharana izy ireo, mifandray amin'izany ny fitsapana ary mandefa baiko an-tsoratra: inona no kitihina, aiza no hahazoana ny angona, sns. Azo ianteherana, fa tsy manerana izao rehetra izao.
Teknolojian'ny fidirana amin'ny desktop fototra
Win32 API taloha tsara
Ny ankamaroan'ny fampiharana Windows nosoratana talohan'ny famoahana ny WPF ary avy eo ny Windows Store dia naorina tamin'ny Win32 API amin'ny fomba iray na hafa. Izany hoe, MFC, WTL, C++ Builder, Delphi, VB6 - ireo fitaovana rehetra ireo dia mampiasa ny Win32 API. Na ny Windows Forms aza dia mifanentana amin'ny Win32 API.
fitaovana: (mitovy amin'ny VB) sy Python wrapper , (fiteny manokana, misy ny interface IDispatch COM), (Python) (Ruby) (Ruby).
Microsoft UI Automation
Ny tombony lehibe indrindra: Ny teknolojia MS UI Automation dia manohana ny ankamaroan'ny rindranasa GUI amin'ny Windows miaraka amin'ny tsy fahita firy. Olana: Tsy mora kokoa ny mianatra noho ny Win32 API. Raha tsy izany dia tsy hisy hanao fonon-tanana eo amboniny.
Raha ny marina, ity dia andian-tsarimihetsika COM mahazatra (indrindra UIAutomationCore.dll), ary manana fonosana .NET amin'ny endrika namespace System.Windows.Automation. Raha ny tokony ho izy dia manana bug nampidirina izy io noho ny tsy fahampian'ny singa UI sasany. Noho izany, tsara kokoa ny mampiasa UIAutomationCore.dll mivantana (raha nandre momba ny UiaComWrapper amin'ny C# ianao, dia izao no izy).
Karazana fifandraisana COM:
(1) Basic IUknown - βny fototry ny ratsy rehetraβ. Ny ambaratonga ambany indrindra, tsy mora ampiasaina.
(2) IDispatch sy derivatives (oh Excel.Application), izay azo ampiasaina amin'ny Python amin'ny fampiasana ny fonosana win32com.client (tafiditra amin'ny pyWin32). Ny safidy mety sy tsara tarehy indrindra.
(3) Fifandraisana manokana izay azon'ny fonosana Python an'ny antoko fahatelo miasa .
fitaovana: amin'ny C#, 0.6.0+, amin'ny C#, (tsy navoaka ny kaody loharanon'izy ireo ho an'ny fonosana C amin'ny UIAutomationCore.dll), amin'ny Ruby.
AT-SPI
Na dia eo aza ny zava-misy fa saika ny famaky rehetra an'ny fianakaviana Linux dia miorina amin'ny X Window System (ao amin'ny Fedora 25, ny "X's" dia novaina ho Wayland), ny "X's" dia mamela anao hiasa amin'ny varavarankely ambony indrindra sy ny totozy / fitendry. Ho an'ny famakafakana amin'ny antsipiriany momba ny bokotra, boaty lisitra, sy ny sisa, dia misy ny teknolojia AT-SPI. Ny mpitantana varavarankely malaza indrindra dia manana antsoina hoe AT-SPI registry daemon, izay manome GUI mandeha ho azy ho an'ny fampiharana (farafaharatsiny Qt sy GTK no tohanana).
fitaovana: .
pyatspi2, raha ny hevitro, dia misy fiankinan-doha be loatra toa ny PyGObject. Ny teknΓ΄lΓ΄jia mihitsy dia azo alaina toy ny tranomboky mavitrika mahazatra libatspi.so. Misy . Ho an'ny tranomboky pywinauto dia mikasa ny hampihatra ny fanohanan'ny AT-SPI izahay amin'ity fomba ity: amin'ny alΓ lan'ny fametahana libatspi.so sy ny module ctypes. Misy olana kely fotsiny amin'ny fampiasana ny dikan-teny ilaina, satria ho an'ny fampiharana GTK + sy Qt dia hafa kely izy ireo. Ny famoahana ny pywinauto 0.7.0 miaraka amin'ny fanohanana Linux feno dia azo antenaina amin'ny tapany voalohany amin'ny 2018.
Apple Accessibility API
MacOS dia manana ny fiteniny manokana, AppleScript. Mba hampiharana zavatra toy izany amin'ny Python, mazava ho azy, mila mampiasa fiasa avy amin'ny ObjectiveC ianao. Manomboka, toa, miaraka amin'ny MacOS 10.6, ny fonosana pyobjc dia tafiditra ao amin'ny Python efa napetraka. Izany dia hanamora ihany koa ny lisitry ny fiankinan-doha amin'ny fanohanana ho avy amin'ny pywinauto.
Fitaovana: Ho fanampin'ny fiteny Apple Script, ilaina ny mandinika , aka pyatom. Mifanaraka amin'ny LDTP izy io, fa tranomboky tokana ihany koa. Manana izany , nosoratan'ny mpianatro. Misy olana fantatra: tsy mandeha ny fotoana miovaova (fomba waitFor*). Saingy amin'ny ankapobeny, tsy zavatra ratsy izany.
Ahoana ny fomba hanombohana pywinauto
Ny dingana voalohany dia ny fiadiana ny tenanao amin'ny inspektera zavatra GUI (izay antsoina hoe fitaovana Spy). Hanampy anao handalina ny fampiharana avy ao anatiny izany: ahoana ny firafitry ny ambaratongan'ny singa, inona ny fananana azo. Ny mpanara-maso ny tranokala malaza indrindra:
- Mpitsikilo++ - miaraka amin'ny Visual Studio, anisan'izany ny Express na Community Edition. Mampiasa Win32 API. Fantatra ihany koa ny kloneny AutoIt Window Info.
- Inspect.exe - tafiditra ao amin'ny Windows SDK. Raha efa nametraka azy io ianao, dia amin'ny Windows 64-bit dia azonao atao ny mahita azy ao amin'ny lahatahiry
C:Program Files (x86)Windows Kits<winver>binx64. Ao amin'ny inspektera mihitsy dia mila misafidy fomba iray ianao UI Automation fa tsy MS AA (Active Accessibility, razamben'ny UI Automation).
Rehefa avy nandinika ny fampiharana izahay dia misafidy ny backend izay hampiasainay. Ampy ny mamaritra ny anaran'ny backend rehefa mamorona ny Application object.
- backend=βwin32β³ - raha ampiasaina amin'ny alΓ lan'ny default, dia miasa tsara amin'ny MFC, WTL, VB6 ary fampiharana lova hafa.
- backend=βuiaβ - backend vaovao ho an'ny MS UI Automation: miasa tsara amin'ny WPF sy WinForms; tsara ihany koa ho an'ny fampiharana Delphi sy Windows Store; miasa miaraka amin'ny Qt5 sy ny fampiharana Java sasany. Ary amin'ny ankapobeny, raha mahita ny singa sy ny fananany ny Inspect.exe, dia mety io backend io. Amin'ny ankapobeny, ny ankamaroan'ny navigateur koa dia manohana ny UI Automation (Mozilla amin'ny alΓ lan'ny default, ary ny Chrome dia mila omena ny fanalahidin'ny baiko rehefa manomboka.
--force-renderer-accessibilitymba hahitana singa amin'ny pejy ao amin'ny Inspect.exe). Mazava ho azy fa zara raha azo atao ny fifaninanana amin'ny Selenium amin'ity sehatra ity. Fomba iray hafa ahafahana miasa amin'ny navigateur (mety ho ilaina amin'ny scenario isan-karazany).
Toerana fidirana ho an'ny automation
Nohadihadiana fatratra ny fampiharana. Fotoana izao hamoronana zavatra Application sy hampandehanana azy na hametahana amin'ny zavatra efa mandeha. Tsy clone an'ny kilasy mahazatra fotsiny izany subprocess.Popen, izany hoe zavatra fampidirana izay mametra ny hetsika rehetra ataonao amin'ny sisin'ny dingana. Tena ilaina izany raha misy tranga maromaro amin'ny fampiharana mandeha, saingy tsy te hikasika ny ambiny ianao.
from pywinauto.application import Application
app = Application(backend="uia").start('notepad.exe')
# ΠΠΏΠΈΡΠ΅ΠΌ ΠΎΠΊΠ½ΠΎ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Ρ
ΠΎΡΠΈΠΌ Π½Π°ΠΉΡΠΈ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Notepad.exe
dlg_spec = app.UntitledNotepad
# ΠΆΠ΄Π΅ΠΌ ΠΏΠΎΠΊΠ° ΠΎΠΊΠ½ΠΎ ΡΠ΅Π°Π»ΡΠ½ΠΎ ΠΏΠΎΡΠ²ΠΈΡΡΡ
actionable_dlg = dlg_spec.wait('visible')Raha te hitantana fampiharana maromaro indray mandeha ianao dia hanampy anao ity kilasy ity Desktop. Ohatra, ao amin'ny kalkulator amin'ny Win10, ny ambaratongan'ny singa dia miparitaka amin'ny dingana maromaro (tsy hoe calc.exe). Ka tsy misy objectif Desktop tsy ampy.
from subprocess import Popen
from pywinauto import Desktop
Popen('calc.exe', shell=True)
dlg = Desktop(backend="uia").Calculator
dlg.wait('visible')Zavatra fototra (Application na Desktop) no hany toerana tokony hamaritana ny backend. Ny zavatra hafa rehetra dia latsaka mangarahara amin'ny foto-kevitra "specification->wrapper", izay hodinihina any aoriana.
Famaritana ny varavarankely / singa
Ity no foto-kevitra fototra iorenan'ny interface pywinauto. Azonao atao ny mamaritra ny varavarankely/singa iray amin'ny antsipiriany na amin'ny antsipiriany, na dia mbola tsy misy na efa mihidy aza. Famaritana ny varavarankely (object WindowSpecification) mitahiry ny fepetra ahafahana mikaroka varavarankely na singa tena izy.
Ohatra amin'ny famaritana ny varavarankely amin'ny antsipiriany:
>>> 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>Ny fitadiavana varavarankely dia mitranga amin'ny fiantsoana ny fomba .wrapper_object(). Mamerina "wrapper" ho an'ny varavarankely / singa tena izy na manipy ElementNotFoundError (indraindray ElementAmbiguousError, raha misy singa maromaro hita, izany hoe mila manazava ny fepetra fikarohana ianao). Ity "wrapper" ity dia efa mahay manao hetsika sasantsasany miaraka amin'ny singa iray na mandray angona avy aminy.
Afaka manafina ny antso i Python .wrapper_object(), ka lasa fohy kokoa ny kaody farany. Manoro hevitra izahay hampiasa azy io ho an'ny tanjona debugging ihany. Mitovy tanteraka ny andalana roa manaraka:
dlg_spec.wrapper_object().minimize() # debugging
dlg_spec.minimize() # productionBetsaka ny fepetra fikarohana momba ny fanondroana varavarankely. Ireto misy ohatra vitsivitsy:
# ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠΎΠ²Π½Π΅ΠΉ
app.window(title_re='.* - Notepad$').window(class_name='Edit')
# ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΡΠΈΡΠ΅ΡΠΈΠΈ (ΠΊΠ°ΠΊ AND) ΠΈ Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
dlg = Desktop(backend="uia").Calculator
dlg.window(auto_id='num8Button', control_type='Button')Ny lisitry ny fepetra rehetra azo atao dia ao amin'ny asa docs .
Ny majika amin'ny fidirana amin'ny toetra sy ny fanalahidy
Ny Python dia manamora ny famoronana fikandrana manokana sy ny hamantatra ny toetran'ny zavatra amin'ny fomba mavitrika (ao anatiny, ny fomba dia nosoloina __getattribute__). Mazava ho azy, fameperana mitovy ihany no apetraka amin'ny anaran'ny toetra toy ny amin'ny anaran'ny variable rehetra (tsy afaka mampiditra habaka, faingo, na tarehintsoratra manokana hafa ianao). Soa ihany fa mampiasa algorithm fikarohana atao hoe "mifanandrina tsara indrindra" i pywinauto izay mahatohitra ny lesoka sy ny fiovaovana kely.
app.UntitledNotepad
# ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ
app.window(best_match='UntitledNotepad')Raha mbola mila tady Unicode ianao (ohatra, ho an'ny teny Rosiana), habaka, sns., azonao idirana amin'ny alalan'ny fanalahidy (toy ny hoe rakibolana mahazatra):
app['Untitled - Notepad']
# ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ
app.window(best_match='Untitled - Notepad')Fitsipika dimy momba ny anarana mahagaga
Ahoana no ahafantarana ny anarana majika mahazatra? Ireo izay voatendry amin'ny singa alohan'ny hikaroka. Raha namaritra anarana mitovy amin'ny fenitra ianao, dia ho hita ilay singa.
- Amin'ny lohateny (soratra, anarana):
app.Properties.OK.click() - Amin'ny lahatsoratra sy amin'ny karazana singa:
app.Properties.OKButton.click() - Amin'ny karazana sy isa:
app.Properties.Button3.click()(anaranaButton0ΠΈButton1mifamatotra amin'ny singa voalohany hita,Button2- mankany amin'ny faharoa, ary avy eo amin'ny filaharana - izany no nitranga ara-tantara) - Amin'ny lahatsoratra static (ankavia na ambony) ary amin'ny karazana:
app.OpenDialog.FileNameEdit.set_text("")(ilaina ho an'ny singa misy lahatsoratra mavitrika) - Amin'ny karazana sy amin'ny lahatsoratra ao anatiny:
app.Properties.TabControlSharing.select("General")
Matetika ny fitsipika roa na telo no ampiharina amin'ny fotoana iray, mahalana kokoa. Mba hanamarinana izay anarana manokana misy ho an'ny singa tsirairay dia azonao ampiasaina ny fomba print_control_identifiers(). Izy io dia afaka manonta hazo misy singa na amin'ny efijery na amin'ny rakitra. Ho an'ny singa tsirairay dia atao pirinty ny anarana majika mahazatra. Azonao atao ihany koa ny mandika sy mametaka ny antsipiriany bebe kokoa momba ny singa ankizy avy ao. Ny vokatra ao amin'ny script dia ho toy izao:
app.Properties.child_window(data-gt-translate-attributes='["title"]' title="Contains:", auto_id="13087", control_type="Edit")Ny hazo misy singa dia matetika lamban-tongotra lehibe.
>>> 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")Amin'ny toe-javatra sasany, ny fanontana ny hazo iray manontolo dia mety ho miadana (ohatra, ao amin'ny iTunes dia misy singa telo arivo amin'ny tabilao iray!), Fa azonao atao ny mampiasa ny safidy. depth (lalina): depth=1 - ny singa tena, depth=2 - ny ankizy avy hatrany, sy ny sisa. Azo faritana ihany koa amin'ny famaritana rehefa mamorona child_window.
ohatra
Mameno tsy tapaka izahay . Amin'ireo vao haingana, dia tsara ny manamarika ny automatique ny WireShark network analyzer (ohatra tsara amin'ny fampiharana Qt5 ity, na dia azo vahana aza ity asa ity raha tsy misy GUI, satria misy scapy.Sniffer avy amin'ny fonosana Python ). Misy ohatra iray amin'ny MS Paint automation miaraka amin'ny Ribbon toolbar.
Ohatra lehibe iray hafa nosoratan'ny mpianatra iray: (hifindra any amin'ny tahiry lehibe izy io aoriana kely).
Ary mazava ho azy, ohatra iray amin'ny famandrihana amin'ny fitendry (fanalahidy mafana) sy hetsika totozy:
.
fankatelemana
Isaorana manokana ireo manampy hatrany aminβny fampandrosoana ny tetikasa. Ho ahy ary Fialam-boly maharitra izany. Ny roa tamin'ireo mpianatro avy ao amin'ny UNN dia niaro ny mari-pahaizana bakalorea momba ity lohahevitra ity. nanao fandraisana anjara lehibe hanohanana ny MS UI Automation ary vao haingana no nanomboka nanamboatra kaody mandeha ho azy mifototra amin'ny foto-kevitra "record-playback" mifototra amin'ny fananana lahatsoratra (io no singa sarotra indrindra), hatreto dia ho an'ny backend "uia". dia mamolavola backend vaovao ho an'ny Linux mifototra amin'ny AT-SPI (modules mouse ΠΈ keyboard mifototra - efa ao amin'ny famoahana 0.6.x).
Satria efa elaela aho no nampianatra taranja manokana momba ny automation amin'ny Python, ny mpianatra master sasany dia manao devoara, manatanteraka endri-javatra kely na ohatra momba ny automatique. Ny zava-dehibe sasany teo amin'ny sehatry ny fikarohana ihany koa dia hitan'ny mpianatra indray mandeha. Na dia tsy maintsy manara-maso mafy ny kalitaon'ny code aza ianao indraindray. Ny mpandinika static (QuantifiedCode, Codacy ary Landscape) ary ny fitsapana mandeha ho azy ao amin'ny rahona (serivisy AppVeyor) miaraka amin'ny fandrakofana kaody manodidina ny 95% dia manampy betsaka amin'izany.
Misaotra ihany koa ho an'izay rehetra mamela hevitra, manangana bibikely ary mandefa fangatahana fisarihana!
Loharano fanampiny
Manaraka fanontaniana izahay (nipoitra vao haingana ) ary . Misy .
Manavao isam-bolana izahay . Raha jerena ny isan'ny kintana ao amin'ny GitHub, Autohotkey ihany (manana vondrom-piarahamonina tena lehibe sy tantara lava be izy ireo) ary PyAutoGUI no mitombo haingana kokoa (noho ny lazan'ny boky nosoratan'i Al Sweigart, mpanoratra azy: Python" sy ny hafa).
Source: www.habr.com
