xpath axes dynamic xpath selenium webdriver
V tomto výučbe sú vysvetlené osi XPath pre dynamický XPath v serveri Selenium WebDriver pomocou rôznych použitých osí XPath, príklady a vysvetlenie štruktúry:
V predchádzajúcom tutoriáli sme sa dozvedeli o funkciách XPath a ich dôležitosti pri identifikácii prvku. Ak však má viac ako jeden prvok príliš podobnú orientáciu a nomenklatúru, je nemožné ho jednoznačne identifikovať.
=> Tu si pozrite perfektného sprievodcu selénom.
Čo sa dozviete:
bezplatný editor skriptov pre Windows
Pochopenie osí XPath
Pochopme vyššie uvedený scenár pomocou príkladu.
Popremýšľajte, aký je scenár, keď sa použijú dva odkazy s textom „Upraviť“. V takýchto prípadoch je dôležité porozumieť uzlovej štruktúre HTML.
Skopírujte a vložte nasledujúci kód do poznámkového bloku a uložte ho ako súbor .htm.
Edit Edit
Používateľské rozhranie bude vyzerať ako na obrazovke nižšie:
Vyhlásenie o probléme
Otázka 1) Čo robiť, keď ani funkcie XPath zlyhajú pri identifikácii prvku?
Odpoveď: V takom prípade využívame osi XPath spolu s funkciami XPath.
Druhá časť tohto článku sa zaoberá tým, ako môžeme na identifikáciu prvku použiť hierarchický formát HTML. Začneme tým, že sa dozvieme trochu informácií o osiach XPath.
Otázka 2) Čo sú to osi XPath?
Odpoveď: Os XPath definuje množinu uzlov vzhľadom na aktuálny (kontextový) uzol. Používa sa na vyhľadanie uzla, ktorý je relatívny k uzlu v tomto strome.
Otázka 3) Čo je to kontextový uzol?
Odpoveď: Kontextový uzol možno definovať ako uzol, na ktorý sa procesor XPath momentálne pozerá.
Rôzne osi XPath používané pri testovaní selénu
Existuje trinásť rôznych osí, ktoré sú uvedené nižšie. Počas testovania selénu ich však nebudeme používať všetky.
- predok : Táto os označuje všetkých predkov vzhľadom na kontextový uzol, tiež siahajúci až po koreňový uzol.
- predok alebo seba: Ten označuje kontextový uzol a všetkých predkov vzhľadom na kontextový uzol a zahŕňa koreňový uzol.
- atribút: Toto označuje atribúty kontextového uzla. Môže byť znázornený symbolom „@“.
- dieťa: Toto označuje deti kontextového uzla.
- dole: Toto označuje deti a vnúčatá a ich deti (ak existujú) kontextového uzla. Toto NEZNAČUJE atribút a menný priestor.
- potomok alebo ja: Toto označuje kontextový uzol a deti a vnúčatá a ich deti (ak existujú) kontextového uzla. Toto NEZNAČUJE atribút a menný priestor.
- nasledujúce: To označuje všetky uzly, ktoré sa objavia po kontextový uzol v štruktúre HTML DOM. Toto NEZNAMENÁVA potomka, atribút a menný priestor.
- nasledovný súrodenec: Ten označuje všetkých súrodeneckých uzlov (rovnakého rodiča ako kontextový uzol), ktoré objaviť sa za kontextovým uzlom v štruktúre HTML DOM. Toto NEZNAMENÁVA potomka, atribút a menný priestor.
- menný priestor: Toto označuje všetky uzly priestoru mien kontextového uzla.
- rodič: Toto označuje rodiča kontextového uzla.
- predchádzajúce: To označuje všetky uzly, ktoré sa objavia predtým kontextový uzol v štruktúre HTML DOM. Toto NEZNAMENÁVA potomka, atribút a menný priestor.
- predchádzajúci súrodenec: Ten označuje všetkých súrodeneckých uzlov (rovnakých rodičov ako kontextové uzly), ktoré sa objavia predtým kontextový uzol v štruktúre HTML DOM. Toto NEZNAMENÁVA potomka, atribút a menný priestor.
- ja: Tento označuje kontextový uzol.
Štruktúra osí XPath
Zvážte nasledujúcu hierarchiu, aby ste pochopili, ako fungujú osi XPath.
Vyššie uvedený príklad nájdete v jednoduchom kóde HTML. Skopírujte a vložte nasledujúci kód do editora poznámkových blokov a uložte ho ako súbor .html.
Animal
Vertebrate
Fish
Mammal
Herbivore
Carnivore
Lion
Tiger
Other
Invertebrate
Insect
Crustacean
Stránka bude vyzerať takto. Našou misiou je využiť osi XPath na jedinečné nájdenie prvkov. Pokúsme sa identifikovať prvky, ktoré sú označené v tabuľke vyššie. Kontextový uzol je „Cicavec“
# 1) Predok
Denník: Na identifikáciu prvku predka z kontextového uzla.
XPath # 1: // div (@ class = ‘Mammal‘) / predok :: div
XPath „// div (@ class =‘ Mammal ’) / ancestor :: div” hodí dva zodpovedajúce uzly:
- Obratlovec, keďže je rodičom cicavca, je preto považovaný aj za predka.
- Zviera ako rodič rodiča „Cicavca“, preto sa považuje za predka.
Teraz musíme identifikovať iba jeden prvok, ktorý je triedou „Zviera“. Môžeme použiť XPath, ako je uvedené nižšie.
XPath#2: //div(@class='Mammal')/ancestor::div(@class='Animal')
Ak sa chcete dostať k textu „Zviera“, môže byť použitý nižšie XPath.
# 2) Predok alebo seba
Denník: Identifikovať kontextový uzol a prvok predka z kontextového uzla.
XPath # 1: // div (@ class = ‘Mammal‘) / ancestor-or-self :: div
Vyššie uvedená XPath # 1 hodí tri zodpovedajúce uzly:
- Zviera (predok)
- Stavovec
- Cicavec (vlastný)
# 3) Dieťa
Denník: Identifikovať potomka kontextového uzla „Cicavec“.
XPath # 1: // div (@ class = ‘Mammal‘) / child :: div
XPath # 1 pomáha identifikovať všetky deti kontextového uzla „Cicavec“. Ak chcete získať konkrétny podradený prvok, použite XPath # 2.
XPath # 2: // div (@ class = ‘Mammal’) / child :: div (@ class = ‘Herbivore’) / h5
# 4) Potomok
Denník: Na identifikáciu detí a vnukov kontextového uzla (napríklad: „Zviera“).
XPath # 1: // div (@ class = ‘Animal‘) / potomok :: div
Pretože Zviera je top členom v hierarchii, zvýrazňujú sa všetky podradené a nasledujúce prvky. Môžeme tiež zmeniť kontextový uzol pre našu referenciu a ako uzol môžeme použiť akýkoľvek prvok, ktorý chceme.
# 5) Potomok alebo ja
Denník: Nájsť samotný prvok a jeho potomkov.
XPath1: // div (@ class = ‘Animal‘) / descendant-or-self :: div
Rozdiel medzi potomkom a potomkom je ten, že sa okrem zvýraznenia potomkov zvýrazňuje aj sám.
# 6) Sledované
Denník: Nájsť všetky uzly, ktoré nasledujú za kontextovým uzlom. Tu je kontextovým uzlom div, ktorý obsahuje prvok Mammal.
XPath: // div (@ class = ‘Mammal‘) / nasledujúci :: div
V nasledujúcich osiach sa zvýrazňujú všetky uzly, ktoré nasledujú za kontextovým uzlom, či už je to potomok alebo potomok.
ako používať double v jave
# 7) Nasledujúci súrodenec
Denník: Nájsť všetky uzly za kontextovým uzlom, ktoré zdieľajú rovnakého rodiča a sú súrodencom kontextového uzla.
XPath: // div (@ class = ‘Mammal‘) / following-sibling :: div
Hlavný rozdiel medzi nasledujúcim a nasledujúcim súrodencom je v tom, že nasledujúci súrodenec vezme všetkých súrodeneckých uzlov po kontexte, ale bude tiež zdieľať rovnakého rodiča.
# 8) Predchádzajúce
Denník: Berie všetky uzly, ktoré prichádzajú pred kontextovým uzlom. Môže to byť uzol rodiča alebo prarodiča.
Tu je kontextovým uzlom Bezstavovce a zvýraznenými čiarami na obrázku vyššie sú všetky uzly, ktoré prichádzajú pred uzlom Bezstavovce.
# 9) Predchádzajúci súrodenec
Denník: Nájsť súrodenca, ktorý má rovnakého rodiča ako kontextový uzol a ktorý sa nachádza pred kontextovým uzlom.
Pretože kontextovým uzlom je bezstavovec, jediným zvýrazneným prvkom je bezstavovec, pretože títo dvaja súrodenci a zdieľajú rovnakého rodiča „Zviera“.
# 10) Rodič
Denník: Vyhľadať nadradený prvok kontextového uzla. Ak je samotný kontextový uzol predok, nebude mať nadradený uzol a nenačítal by žiadne zodpovedajúce uzly.
Kontextový uzol č. 1: Cicavec
XPath: // div (@ class = ‘Mammal‘) / parent :: div
Pretože kontextový uzol je Cicavec, prvok s obratlovcami sa zvýrazňuje, pretože je rodičom Cicavca.
Kontextový uzol č. 2: Zviera
XPath: // div (@ class = ‘Animal‘) / parent :: div
Pretože samotný zvierací uzol je predkom, nebude zvýrazňovať žiadne uzly, a preto sa nenašli žiadne zodpovedajúce uzly.
# 11) Ja
Denník: Na nájdenie kontextového uzla sa používa ja.
Kontextový uzol: Cicavec
XPath: // div (@ class = ‘Mammal‘) / self :: div
Ako vidíme vyššie, objekt Cicavce bol identifikovaný jedinečne. Môžeme tiež zvoliť text „Cicavec pomocou nižšie uvedenej cesty XPath.
XPath: // div (@ class = ‘Mammal‘) / self :: div / h4
Použitie predchádzajúcich a nasledujúcich osí
Predpokladajme, že viete, že vaším cieľovým prvkom je počet značiek dopredu alebo dozadu od kontextového uzla, môžete teda priamo zvýrazniť tento prvok a nie všetky prvky.
Príklad: predchádzajúci (s indexom)
Predpokladajme, že náš kontextový uzol je „Iný“ a chceme sa dostať k prvku „Cicavce“, na to by sme použili nasledujúci prístup.
Prvý krok: Jednoducho použite predošlé bez udania hodnoty indexu.
XPath: // div (@ class = ‘Other’) / predchádzajúce :: div
To nám dáva 6 zhodných uzlov a my chceme iba jeden cieľový uzol „Mammal“.
Druhý krok: Priraďte hodnote indexu (5) prvku div (počítaním nahor od kontextového uzla).
XPath: // div (@ class = ‘Other’) / predchádzajúce :: div (5)
Týmto spôsobom bol prvok „cicavec“ úspešne identifikovaný.
Príklad: nasledujúci (s indexom)
Predpokladajme, že náš kontextový uzol je „Savec“ a chceme sa dostať k prvku „Crustacean“. Použijeme na to nižšie uvedený prístup.
Prvý krok: Jednoducho použite nasledujúce bez udania hodnoty indexu.
XPath: // div (@ class = ‘Mammal‘) / nasledujúci :: div
Získali sme 4 zodpovedajúce uzly a chceme iba jeden zacielený uzol „Crustacean“.
Druhý krok: Priraďte hodnotu indexu (4) prvku div (počítajte dopredu od kontextového uzla).
XPath: // div (@ class = ‘Other‘) / sledujúci :: div (4)
Týmto spôsobom bol prvok „kôrovec“ úspešne identifikovaný.
Vyššie uvedený scenár je možné znova vytvoriť pomocou predchádzajúci súrodenec a nasledujúci súrodenec uplatnením vyššie uvedeného prístupu.
Záver
Identifikácia objektu je najdôležitejším krokom v automatizácii akejkoľvek webovej stránky. Ak dokážete získať zručnosť naučiť sa objekt presne, urobí sa 50% vašej automatizácie. Aj keď sú na identifikáciu prvku k dispozícii lokátory, existujú prípady, keď sa ani lokátorom nepodarí objekt identifikovať. V takýchto prípadoch musíme uplatniť rôzne prístupy.
Tu sme použili funkcie XPath a osi XPath na jednoznačnú identifikáciu prvku.
Tento článok uzatvárame zápisom niekoľkých bodov, ktoré si treba pamätať:
- Nemali by ste používať osi „predok“ na kontextový uzol samotného kontextového uzla, ktorý je predkom.
- „Rodičovské“ osi by ste nemali používať na kontextový uzol samotného kontextového uzla, ktorý je predkom.
- Nemali by ste používať „podradené“ osi na kontextový uzol samotného kontextového uzla, ktorý je potomkom.
- Nemali by ste používať „potomkovské“ osi na kontextový uzol samotného kontextového uzla, ktorý je predkom.
- „Nasledujúce“ osi by ste nemali aplikovať na kontextový uzol, je to posledný uzol v štruktúre dokumentu HTML.
- Nemali by ste aplikovať „predchádzajúce“ osi na kontextový uzol, ktorý je prvým uzlom v štruktúre dokumentu HTML.
Šťastné učenie !!!
=> Navštívte tu exkluzívnu sériu výučbových školení pre selén.
Odporúčané čítanie
- Funkcie XPath pre dynamický XPath v seléne
- Výukový program Cucumber Selenium: Cucumber Java Selenium WebDriver Integration
- Selénové lokátory: Identifikácia webových prvkov pomocou XPath v seléne (príklady)
- Úvod do softvéru Selenium WebDriver - Výučba selénu č. 8
- Výukový program pre selén ChromeDriver: Testy selenového webdriveru v prehliadači Chrome
- Implementácia nášho prvého skriptu WebDriver - výučba selénu WebDriver č. 10
- 30+ najlepších návodov na selén: Naučte sa selén na skutočných príkladoch
- Zaobchádzanie s webovými tabuľkami, rámcami a dynamickými prvkami v selenovom skripte - selénský výukový program č. 18