ultimate xpath writing cheat sheet tutorial with syntax
20 najboljših načinov za pisanje končnega XPATH za katero koli vrsto spletnega elementa (XPATH ne bo nikoli neveljaven):
Spletna aplikacija je sestavljena iz različnih vrst spletnih elementov, kot so spletni element za gumb, ki ga kliknete, vnos spletnega elementa za vnos besedila, spustni meni, izbirni gumbi itd.
Ti spletni elementi se imenujejo tudi oznake ali vozlišča.
Ko gre za avtomatizacijo spletnih aplikacij, se začne s pisanjem skripta za avtomatizacijo, ki bo našel spletni element, na njem izvedel dejanje, na primer klik na gumb, vnos besedila v vnosno polje, potrditev polja, izbirni gumb, pomaknite se navzgor ali navzdol in na koncu preverite pričakovano vedenje po vrsti akcije.
Kaj se boste naučili:
- Kaj je XPath in kako je videti?
- 20 najboljših načinov za pisanje XPath za kateri koli spletni element
- # 1) Povratno iskanje
- # 2) Uporaba spremenljivk in vrednosti po meri
- # 3) Uporaba oznak “XML”, “IN” itd
- # 4) Uporaba atributov in tabele XPATH
- # 5) Uporaba atributov, tabel in besedila
- # 6) Ustvarjanje XPATH z uporabo ugnezdenih atributov
- # 7) Generacija XPath s kombiniranjem atributov, delitev in gumba
- # 8) XPATH Ustvarjanje z uporabo CONTAINS, REVERSE LOOKUP itd.
- # 9) Generacija XPath z uporabo relativnega, VSEBUJE, REVERZNO, NASLEDNJO SIBLING itd.
- # 10) Generacija XPath z uporabo atributov, vsebuje, vzvratno, predhodno sibling, razdelitve in razpon
- # 11) Uporaba atributov, oznak XML itd.
- # 12) Generacija XPath, tako da ne pogledate celotne strani, temveč namesto tega pogledate vse povezave in vsebuje
- # 13) Uporaba vsebin in atributov
- # 14) Uporaba atributov, sledenje bratom in sestram in potomcem
- # 15) Uporaba atributov, sledenje bratom in sestram, potomcem in besedilo
- # 16) Uporaba glave in besedila
- # 17) Uporaba besedila glave, sledenja bratom in sestram, poti itd.
- # 18) Uporaba atributov, vsebin in predhodnih bratov in sester
- # 19) Iskanje spustnega menija z uporabo atributa Id, določenega besedila in povratnega iskanja
- # 20) Združevanje atributa 'id' in iskanje povezave z določenim besedilom
- Zaključek
- Priporočeno branje
Kaj je XPath in kako je videti?
Iskanje elementa je kot iskanje hiše nekoga na zemljevidu. Edini način, da najdemo prijateljev dom brez kakršne koli zunanje pomoči, je, da bi morali imeti zemljevid in vedeti, kaj najti (hišo).
Da bi v našem primeru uporabili to analogijo, bo zemljevid uporabljen kot DOM (oznake HTML, JavaScript itd.), Kjer obstajajo vsi spletni elementi, skupaj s specifičnim spletnim elementom, ki ga želimo najti.
Ko najdete enolični naslov ali pot elementa, bo skript za avtomatizacijo izvedel nekaj dejanj na podlagi preskusnega scenarija. Na primer, želite preveriti URL strani, ki se odpre po kliku na gumb.
Vendar ni enostavno najti edinstvenega naslova / poti spletnega elementa, saj lahko obstajajo podobne oznake, enake vrednosti atributov in enake poti, zaradi česar je težko ustvariti natančen enoličen naslov spletnega elementa, imenovanega 'XPATH'.
zasebni strežniki za world of warcraft
Tu se bomo poglobili v nekaj odličnih in učinkovitih tehnik za ustvarjanje veljavnih in edinstvenih XPATH za vse vrste spletnih elementov.
Priporočeno branje => Prepoznajte spletne elemente s pomočjo XPath v selenu
Včasih lahko preprosto ustvarite XPaths z razširitvami brskalnika, vendar v mojem testiranje avtomatizacije v svoji karieri sem se srečeval z nešteto situacijami, ko tradicionalne razširitve brskalnikov ne delujejo, zato morate sami ustvariti svoje prilagojene XPaths s svojo ustvarjalnostjo. Prepričan sem, da ste se ali se boste soočali s podobnimi situacijami.
V tej vadnici si bomo ogledali 20 najboljših načinov, kako ustvariti končni XPath za spletni element tako, da bo tudi ob spremembi kode XPath ves čas veljaven (razen če razvijalec ne napiše celotnega funkcija / modul).
S poznavanjem vseh teh tehnik boste postali mojster pisanja lastnega XPath-a in bi lahko napisali morilske XPath-e z zelo malo možnosti, da bi postali neveljavni.
Najprej začnimo z razumevanjem sintakse XPath in določimo vsak njen del.
Spodnja slika prikazuje, kako bo XPath videti, skupaj z opisom vsakega dela:
- //: Izberite trenutno vozlišče, kot so vnos, div itd.
- Oznaka: Oznaka spletnega elementa / vozlišča
- @: Izberite atribut
- Lastnost: Ime atributa vozlišča / določenega spletnega elementa
- Vrednost: Vrednost atributa
Tukaj želim deliti le nekaj nasvetov, da 80% časa moj skript za avtomatizacijo ni uspel zaradi XPath-a. Razlog za to je, da obstaja več spletnih elementov za zagotovljeni XPath ali XPath ni veljaven ali stran še ni naložena.
Torej, kadar vaš testni primer ne uspe:
- Kopirajte svoj XPath.
- Poiščite ga v brskalniku (F12 ali okno orodja za razvijalce) v DOM-u, da preverite, ali je veljaven ali ne (glejte spodnjo sliko).
Pro Type 1: Prepričajte se, da je edinstven in da se pri dvojnem iskanju v DOM ne prikaže noben drug spletni element.
Pro Type 2: Včasih pride do težave s časovnim razporedom, kar pomeni, da vaš spletni element / stran še ni naložen, medtem ko ga je skript iskal, zato dodajte nekaj čakalnega časa in znova preizkusite.
Pro Type 3: Pred iskanjem spletnega elementa poskusite natisniti celoten DOM. Tako lahko v konzoli ugotovite, ali vaš spletni element obstaja v DOM-u ali ne.
Preden se potopimo globoko v XPath, poiščite eno pomembno stvar, ki jo želim deliti, je, da če imate neposreden dostop do razvojne ekipe ali če je vaša ekipa tam, kjer ste, prosite svojo razvojno skupino, da vam posreduje edinstvene ID-je v vsak spletni element ali vsaj tiste, ki jih želite uporabiti za avtomatizacijo, kar vam bo prihranilo veliko časa.
Če to ni možnost, boste morda morali uporabiti svojo ustvarjalnost in pripraviti lastne XPaths po meri, česar se bomo zdaj naučili.
20 najboljših načinov za pisanje XPath za kateri koli spletni element
Poglobimo se v ustvarjanje 20 najboljših poti do morilskega XPath-a.
# 1) Povratno iskanje
Recimo, da želite klikniti gumb in obstaja podoben gumb. Oba gumba imata atributa id, vendar sta dinamična in noben od atributov ni enoličen v obeh elementih gumba.
V spodnjem scenariju želimo klikniti gumb “Nastavitev” v “Test Interactive”.
Koda
Če pogledate gumba 'Nastavitev', sta si obe kodi podobni. Z uporabo tradicionalnih načinov, kot so id, ime, vrednost, vsebuje itd., Noben od njih na primer ne bo deloval.
// * (vsebuje (besedilo (), 'Nastavitev')), rezultat bosta dva spletna elementa. Zato ni edinstven.
Tu je končna strategija,
>> Najprej poiščite najbližjo oznako, ki je edinstvena in v tem primeru je
XPATH: “//*(@id='rcTEST')
>> Drugič, poiščite najbližji spletni element predvidenemu spletnemu elementu, ki ga v tem primeru vsebuje (text (), „TEST Interactive“). Zdaj smo na istem mestu, kjer obstaja gumb 'Nastavitev', a da ga kliknemo, moramo najprej uporabiti dvojne pike, kot je prikazano spodaj.
XPATH: “//*(@id='rcTEST')//*(contains(text(), 'TEST Interactive'))/..
>> Kot lahko vidite, smo na ravni, ki ima drugi spletni element kot gumb 'Nastavitev'. Ta ima dva gumba in želimo iti do drugega gumba, ki je gumb 'Nastavitev'. Z dodajanjem gumba »/ gumb (2)« na koncu lahko dobimo svoj edinstveni XPATH za gumb »Nastavitev«, kot je prikazano spodaj.
Končni XPATH:
“//*(@id='rcTEST')//*(contains(text(), 'TEST Interactive'))/../button(2)”
Tu je še en način za ustvarjanje, če menite, da bi lahko spremenili vrsto spletnega elementa iz »gumb« v kaj drugega.
“//*(@id='rcTEST')//*(contains(text(), 'TEST Interactive'))/..//*(contains(text(), 'Setting'))”
ali z uporabo »naslednega brata«
“//*(@id='rcTEST')//*(contains(text(), 'TEST Interactive'))/following-sibling::button”
# 2) Uporaba spremenljivk in vrednosti po meri
Recimo, da obstaja spletna aplikacija, ki ima FTP (»File Transfer Protocol«) funkcijo za nalaganje / prenos datotek in imate testni primer za prenos določene datoteke s klikom na povezavo za prenos.
Najprej lahko določimo ime datoteke, ki jo iščemo kot spremenljivko.
Niz pričakujefileName = “Test1”;
ustvari niz nizov v javi
Zdaj s pomočjo XPATH lahko najdemo dejansko ime datoteke.
“String actualFileName = WebDriverAccess.getDriver().findElement (By.xpath('//*'+fileName +'/tr/td(1)')).getAttribute('title');”
V zgornjem XPathu bo… ‘/ tr / td (1) .getAttribute (“ naslov ”)“ prešel v določeno vrstico in prvi stolpec in dobil vrednost atributa naslova. Dejansko ime datoteke lahko shranimo v drugo spremenljivko.
Ko imamo pričakovano in dejansko ime datoteke, lahko primerjamo obe in če se obe ujemata, preprosto kliknemo na povezavo za prenos.
(if acutalFileName == expectedFileName) { WebDriverAccess.getDriver().findElement(By.xpath('//*'+fileName +'/tr/td(4)')).click(); }
Prav tako lahko ustvarimo zanko skozi vsako vrstico in nadaljujemo s preverjanjem imena datoteke, dokler je ne najdete.
Loop(int count <30) { String actualFileName = WebDriverAccess. getDriver ().findElement (By. xpath ('//*'+acutalFileName +'/tr(' + count + ')/td(1)')).getAttribute('title'); (if acutalFileName == expectedFileName) { WebDriverAccess. getDriver ().findElement(By. xpath ('//*'+fileName +'/tr/td(4)')).click(); } Count++; }
Ustvarimo lahko edinstven XPATH z uporabo prilagojenih oznak in dodamo druge pogoje.
Na primer, recimo, da naš predvideni spletni element obstaja v glavni oznaki in je več naslovnih oznak, vendar želite najti samo določeno. Vse naslovne oznake imajo atribut razreda, zato lahko začnemo z.
// address(@class='ng-scope ng-isolate-scope')
Opazili smo, da je naš predvideni spletni element v oznaki, ki vsebuje nekaj besedila, imenovano 'Testiranje'.
// address(@class='ng-scope ng-isolate-scope')//div(contains(.,'Testing')
Ugotovili smo, da je bilo zato najdenih več spletnih elementov. Da bi ga naredili bolj edinstvenega, lahko dodamo še druge pogoje, kot je »id«, ki nas bo končno usmeril na spletni element, ki ga iščemo.
// address(@class='ng-scope ng-isolate-scope')//div(contains(.,Testing') and @id='msgTitle')
# 4) Uporaba atributov in tabele XPATH
Predpostavimo, da želimo vtipkati v spletni element, ki je nameščen znotraj tabele, tabela pa znotraj elementa obrazca.
V DOM-u lahko najdemo vse obrazce z imenom 'myForm'.
“//*(@name='myForm')”
Zdaj v vseh obrazcih poiščite tabelo z id 'tbl_testdm'.
'//*(@name='myForm')//table(@id='tbl_ testdm’)”
V tabeli pojdite na določeno vrstico in stolpec.
'//*(@name='myForm')//table(@id='tbl_ testdm’)/tbody/tr/td(6)/”
Če je v celici več vhodov, poiščite vhod, kjer je vrednost = 'Odpri RFS', in to nam bo dalo končni XPath polja.
//*(@name='myForm')//table(@id='tbl_ testdm’)/tbody/tr/td(6)/ input(@value='Open RFS')'
# 5) Uporaba atributov, tabel in besedila
Predpostavimo, da je vaš predvideni spletni element v tabeli plošč in ima nekaj običajnega besedila.
Najprej začnite s ploščo z edinstvenim atributom, ki je v tem primeru ‘TITLE’.
//*(@title=’Songs Lis Applet')
Zdaj se pomaknite po vseh oznakah tabele.
//*(@title=’Songs Lis Applet')//table
V vseh tabelah poiščite stolpec z besedilom 'Avtor'.
Končni XPath bi bil tak:
//*(@title=’Songs List Applet')//table//td(contains(text(),'Author'))
# 6) Ustvarjanje XPATH z uporabo ugnezdenih atributov
XPath ciljnega spletnega elementa je mogoče generirati tudi z uporabo ugnezdenih atributov. Na primer, v tem primeru bo poiskal določen atribut v celotnem DOM-u in nato poiskal drug atribut znotraj njega.
//*(@id='parameters')//*(@id='testUpdateTime')')
# 7) Generacija XPath s kombiniranjem atributov, delitev in gumba
Na primer, v spodnjem XPathu sem lahko našel ciljni spletni element z uporabo id-ja (relativni XPath), nekaterih oznak div in gumba.
“//*(@id='MODEL/PLAN')/div(1)/div(2)/div(1)/div(1)/widget/section/div(1)/div/div(1)/div/div/button(1)'
# 8) XPATH Ustvarjanje z uporabo CONTAINS, REVERSE LOOKUP itd.
Enkrat sem imel spustni meni brez neposredne identifikacije. Za pripravo končnega XPATH sem moral uporabiti atribute CONTAINS, REVERSE, DIVs, kot je prikazano spodaj.
//*(contains(text(),'Watch Dial))/../div/select(@data-ng-model='context.questions (subqts.subHandleSubId)')'),
# 9) Generacija XPath z uporabo relativnega, VSEBUJE, REVERZNO, NASLEDNJO SIBLING itd.
Imel sem situacijo, ko je aplikacija prikazala graf in je bilo treba vsako vrednost grafa potrditi. Toda na žalost vsaka vrednost ni imela nobene enolične identifikacije, zato sem pripravil končni XPATH, kot je prikazano spodaj, za eno vrednost grafa, ki združuje relativne, vsebuje, povratne, sledilne sestre in oznake div.
//*(@id='RESEARCH/PLAN')//*(contains(@id, 'A4'))/../../following-sibling::div(1)/div(1)/span(1)/span(1)
# 10) Generacija XPath z uporabo atributov, vsebuje, vzvratno, predhodno sibling, razdelitve in razpon
Ko sem moral potrditi različne podatke alarma, se vsaka vrednost alarma prikaže na podlagi določenega izračuna ali časovnih razporedov. Da bi zajel vsako vrednost, sem moral pripraviti spodnji XPATH, ki uporablja atribute, vsebuje, povratne oznake, oznake predhodnega brata, div in razpon.
//*(@id='ALARMDATA')//*(contains(@id, 'AFC2'))/../../preceding-sibling::div(1)/div(1)/span(1)/span(1)
# 11) Uporaba atributov, oznak XML itd.
V spodnjih atributih in oznakah XML XPATH se zaporedje uporablja za pripravo končnega edinstvenega naslova spletnega elementa.
//*(@id='RESEARCH/REVIEW') //widget/section/div(1)/div/div(2)/div(1)/div(3)/div(1)//span(@class='details')
# 12) Generacija XPath, tako da ne pogledate celotne strani, temveč namesto tega pogledate vse povezave in vsebuje
Spodnji XPath bi iskal samo povezave na celotni strani, ki vsebujejo besedilo kot 'Ročni vnos podatkov o parametrih'.
//a(contains(.,'Parameter Data Manual Entry'))
# 13) Uporaba vsebin in atributov
//*(contains(@style,'display: block; top:'))//input(@name='daterangepicker_end')
# 14) Uporaba atributov, sledenje bratom in sestram in potomcem
//*(@id='dropdown-filter-serviceTools')/following-sibling::ul/descendant::a(text()='Notepad')
# 15) Uporaba atributov, sledenje bratom in sestram, potomcem in besedilo
//*(@id='dropdown-filter-service tools') /following-sibling::ul/descendant::a(text()='Trigger Dashboard')
# 16) Uporaba glave in besedila
Če je spletni element glava z določenim besedilom, je XPath lahko tak, kot je prikazano spodaj:
lahko eclipse zažene c ++
//h3(text()='Internal Debrief')
# 17) Uporaba besedila glave, sledenja bratom in sestram, poti itd.
//h3(contains(text(),'Helium Level'))/following-sibling::div/label/input
# 18) Uporaba atributov, vsebin in predhodnih bratov in sester
Ko sem imel razpon, ki ni imel nobenega edinstvenega atributa, sem ustvaril XPATH, tako da sem združil absolutno, Vsebuje, predhodne brate in sestre in drugo absolutno pot.
//div(div(p(contains(text(),'Status'))))/preceding-sibling::div/div/span(3)/span
# 19) Iskanje spustnega menija z uporabo atributa Id, določenega besedila in povratnega iskanja
//*(@id='COUPLING')//*(contains(text(),'COUPLE Trend'))/../div/select
# 20) Združevanje atributa 'id' in iskanje povezave z določenim besedilom
//*(@id='ffaHeaderDropdown')//a(contains(text(),'Start Workflow'))
Zaključek
Ko gre za pisanje morilskega XPATH, je res odvisno od tega, kako dobro razumete in analizirate kodo. Bolj ko boste razumeli kodo, več bo načinov, ki jih boste našli pri pisanju učinkovitih XPATH.
Prvi korak pri pisanju XPath je iskanje najbližjega edinstvenega spletnega elementa vašemu ciljnemu spletnemu elementu in nadaljnje približevanje z uporabo zgoraj obravnavanih tehnik, kot so atributi, DIV-ji, sledenje, vsebina itd.
Na koncu bi še enkrat rekli, da vam bo res olajšalo življenje, če zahtevate, da vaša razvojna skupina doda edinstvene ID-je v vse spletne elemente, ki vas zanimajo.
Vsakič, ko se začne šprinterski cikel ali delo na novih zahtevah in se ekipa deli z novimi maketami, v mislih vedno preidem vse pomisleke in v mislih pomislim na morebitne testne primere avtomatizacije, pripravim seznam vseh potencialnih spletnih elementov, ki bodo uporabljeni v avtomatizacijskih testih in si pripravim lastne ID-je.
Ko je seznam vseh spletnih elementov skupaj z mojimi predlaganimi ID-ji izpolnjen, bi ga predhodno delil razvijalcu, da se bo uporabil v razvojni kodi. Na ta način bi vedno dobil edinstvene osebne dokumente, tako da bi olajšal pisanje bitke XPATH.
Spodaj je kombiniran seznam različnih načinov pisanja XPATH:
- '// * (@ id = 'rcTEST') // * (vsebuje (besedilo (), 'TEST Interactive')) /../ gumb (2)'
- '// * (@ id = 'rcTEST') // * (vsebuje (text (), 'TEST Interactive')) /..//* (vsebuje (text (), 'Setting'))'
- '// * (@ id = 'rcTEST') // * (vsebuje (besedilo (), 'TEST Interaktivno')) / naslednik / sestra :: gumb'
- 'String actualFileName = WebDriverAccess.getDriver (). FindElement (By.xpath (' // * '+ fileName +' / tr / td (1) ')). GetAttribute (' title ');'
- WebDriverAccess.getDriver (). FindElement (By.xpath (“// *” + FileName + ”/ tr / td (4)”)). Click ();
- '// naslov (@ class = 'ng-scope ng-isolate-scope') // div (vsebuje (., Testiranje ') in @ id =' msgTitle ')'
- '// * (@ name = 'myForm') // tabela (@ id = 'tbl_ testdm') / tbody / tr / td (6) /
- vhod (@ value = 'Open RFS') '
- '// * (@ title = 'Applet s seznamom pesmi') // tabela // td (vsebuje (besedilo (), 'Avtor'))'
- '// * (@ id = 'parametri') // * (@ id = 'testUpdateTime')') '
- “// * (@ id = 'MODEL / PLAN') / div (1) / div (2) / div (1) / div (1) / widget / section / div (1) / div / div (1) / div / div / gumb (1) '
- '// * (vsebuje (text (), 'Watch Dial)) /../ div / select (@ data-ng-model =' context.questions (subqts.subHandleSubId) ')'), '
- “// * (@ id = 'RESEARCH / PLAN') // * (vsebuje (@id, 'A4')) /../../ following-sibling :: div (1) / div (1) / razpon (1) / razpon (1) '
- “// * (@ id = 'ALARMDATA') // * (vsebuje (@id, 'AFC2')) /../../ preceding-sibling :: div (1) / div (1) / span ( 1) / razpon (1) '
- “// * (@ id = 'RAZISKAVA / PREGLED') // pripomoček / odsek / div (1) / div / div (2) / div (1) / div (3) / div (1) // span ( @ class = 'podrobnosti') ”
- “//A( vsebuje ((, ,, Ročni vnos podatkov parametra '))“
- '// * (vsebuje (@ slog, 'display: block; top:')) // vnos (@ name = 'daterangepicker_end')'
- '// * (@ id = 'dropdown-filter-serviceTools') / following-sibling :: ul / descendant :: a (text () = 'Notepad')'
- '// * (@ id = 'dropdown-filter-serviceTools') / following-sibling :: ul / descendant :: a (text () = 'Sproži nadzorno ploščo')'
- '// h3 (text () = 'Notranja predstavitev')'
- '// h3 (vsebuje (besedilo (), 'Raven helija')) / naslednik / sestra :: div / label / input'
- '// div (div (p (vsebuje (besedilo (), 'Status'))))) / preceding-sibling :: div / div / span (3) / span'
- “// * (@ id =‘ SPOJANJE ’) // * (vsebuje (besedilo (),‘ PAR Trend ’)) /../ div / select”
- '// * (@ id = 'ffaHeaderDropdown') // a (vsebuje (besedilo (), 'Začni potek dela'))'
Upam, da bi vam ta informativni članek obogatil znanje o pisanju XPaths.
Avtor Bio: Ta članek je napisal Adnan Arif, IT strokovnjak, ki ima v svoji 9-letni karieri raznolike izkušnje in spretnosti.
Priporočeno branje
- Vadnice za globinsko zasenčenje za začetnike
- Vadnica Python DateTime s primeri
- Sintaksa ukaza Unix Cat, možnosti s primeri
- Ukaz za razvrščanje Unix s sintakso, možnostmi in primeri
- Vadnica za skriptiranje lupine Unix s primeri
- Vadnica za iskanje selena z besedilom s primeri
- Vadnica za glavne funkcije Pythona s praktičnimi primeri
- Postprocesor ekstraktorja Xpath v JMetru