xpath axes dynamic xpath selenium webdriver
Tento výukový program vysvětluje osy XPath pro dynamický XPath v selenu WebDriver s pomocí různých použitých os XPath, příklady a vysvětlení struktury:
V předchozím kurzu jsme se dozvěděli o funkcích XPath a jeho důležitosti při identifikaci prvku. Pokud však má více než jeden prvek příliš podobnou orientaci a nomenklaturu, je nemožné tento prvek jednoznačně identifikovat.
=> Podívejte se na průvodce Perfect Selenium Training Guide.
Co se naučíte:
Porozumění osám XPath
Rozumíme výše uvedenému scénáři pomocí příkladu.
Přemýšlejte o scénáři, kde jsou použity dva odkazy s textem „Upravit“. V takových případech je vhodné porozumět uzlové struktuře HTML.
Zkopírujte a vložte níže uvedený kód do poznámkového bloku a uložte jej jako soubor .htm.
Edit Edit
Uživatelské rozhraní bude vypadat jako na následující obrazovce:
Problémové prohlášení
Otázka 1) Co dělat, když ani XPath Functions nedokážou identifikovat prvek?
Odpovědět: V takovém případě používáme osy XPath spolu s funkcemi XPath.
Druhá část tohoto článku se zabývá tím, jak můžeme k identifikaci prvku použít hierarchický formát HTML. Začneme tím, že získáme trochu informací o osách XPath.
Otázka 2) Co jsou osy XPath?
co je to typ souboru SWF
Odpovědět: Osy XPath definují množinu uzlů vzhledem k aktuálnímu (kontextovému) uzlu. Používá se k vyhledání uzlu, který je relativní k uzlu v daném stromu.
Otázka č. 3) Co je to kontextový uzel?
Odpovědět: Kontextový uzel lze definovat jako uzel, na který se procesor XPath aktuálně dívá.
Různé osy XPath používané při testování selenu
Existuje třináct různých os, které jsou uvedeny níže. Během testování selenu je však nebudeme používat všechny.
- předek : Tato osa označuje všechny předky ve vztahu k kontextovému uzlu, dosahující také ke kořenovému uzlu.
- předek nebo já: Ten označuje kontextový uzel a všechny předky vzhledem k kontextovému uzlu a zahrnuje kořenový uzel.
- atribut: To označuje atributy kontextového uzlu. Může být znázorněn symbolem „@“.
- dítě: To označuje podřízené objekty kontextového uzlu.
- dolů: To označuje děti a vnoučata a jejich děti (pokud existují) kontextového uzlu. To NEZNAMENÁ atribut a jmenný prostor.
- potomek nebo já: To označuje kontextový uzel a děti a vnoučata a jejich děti (pokud existují) kontextového uzlu. To NEZNAMENÁ atribut a jmenný prostor.
- Následující: To označuje všechny uzly, které se objeví po kontextový uzel ve struktuře HTML DOM. To NEZNAMENÁ potomka, atribut a jmenný prostor.
- následující sourozenec: Ten označuje všechny sourozenecké uzly (stejného rodiče jako kontextový uzel), které objevit za kontextovým uzlem ve struktuře HTML DOM. To NEZNAMENÁ potomka, atribut a jmenný prostor.
- jmenný prostor: To označuje všechny uzly oboru názvů kontextového uzlu.
- rodič: To označuje rodiče nadřazeného uzlu.
- předchozí: To označuje všechny uzly, které se objeví před kontextový uzel ve struktuře HTML DOM. To NEZNAMENÁ potomka, atribut a jmenný prostor.
- předcházející sourozenec: Ten označuje všechny sourozenecké uzly (stejný rodič jako kontextový uzel), které se objeví před kontextový uzel ve struktuře HTML DOM. To NEZNAMENÁ potomka, atribut a jmenný prostor.
- já: Ten označuje kontextový uzel.
Struktura os XPath
Zvažte níže uvedenou hierarchii, abyste pochopili, jak osy XPath fungují.
Níže je uveden jednoduchý HTML kód pro výše uvedený příklad. Zkopírujte a vložte níže uvedený kód do editoru poznámkových bloků a uložte jej jako soubor .html.
Animal
Vertebrate
Fish
Mammal
Herbivore
Carnivore
Lion
Tiger
Other
Invertebrate
Insect
Crustacean
Stránka bude vypadat níže. Naším posláním je využít os XPath k jedinečnému nalezení prvků. Zkusme identifikovat prvky, které jsou označeny v tabulce výše. Kontextový uzel je 'Savec'
# 1) Předek
Deník: K identifikaci prvku předka z kontextového uzlu.
XPath # 1: // div [@ class = ‘Mammal‘] / ancestor :: div
XPath „// div [@ class =‘ Mammal ’] / ancestor :: div” hodí dva shodné uzly:
- Obratlovec, protože je rodičem „savce“, je tedy považován také za předka.
- Zvíře jako rodič rodiče „savce“, proto je považováno za předka.
Nyní musíme identifikovat pouze jeden prvek, který je třídou „Zvíře“. Můžeme použít XPath, jak je uvedeno níže.
XPath#2: //div[@class='Mammal']/ancestor::div[@class='Animal']
Pokud se chcete dostat k textu „Zvíře“, můžete použít níže XPath.
# 2) Předek nebo já
Deník: Identifikovat kontextový uzel a prvek předka z kontextového uzlu.
XPath # 1: // div [@ class = ‘Mammal‘] / ancestor-or-self :: div
Výše uvedená XPath # 1 hodí tři shodné uzly:
- Zvíře (předek)
- Obratlovců
- Savec (já)
# 3) Dítě
Deník: Identifikovat dítě kontextového uzlu „Savec“.
XPath # 1: // div [@ class = ‘Mammal‘] / child :: div
XPath # 1 pomáhá identifikovat všechny děti kontextového uzlu „Savec“. Pokud chcete získat konkrétní podřízený prvek, použijte XPath # 2.
XPath # 2: // div [@ class = ‘Mammal’] / child :: div [@ class = ‘Herbivore’] / h5
# 4) Potomek
Deník: Identifikovat děti a vnoučata kontextového uzlu (například: „Zvíře“).
XPath # 1: // div [@ class = ‘Animal‘] / descendant :: div
Protože Animal je v hierarchii nejlepším členem, zvýrazňují se všechny podřízené a potomkové prvky. Můžeme také změnit kontextový uzel pro naši referenci a jako uzel použít libovolný prvek, který chceme.
youtube na mp3 delší než 90 minut
# 5) Potomek nebo já
Deník: Najít samotný prvek a jeho potomky.
XPath1: // div [@ class = ‘Animal‘] / descendant-or-self :: div
Jediným rozdílem mezi potomkem a potomkem je to, že se kromě zvýraznění potomků zvýrazní.
# 6) Následující
Deník: Najít všechny uzly, které následují za kontextovým uzlem. Tady je kontextovým uzlem div, který obsahuje prvek Savec.
XPath: // div [@ class = ‘Mammal‘] / následující :: div
V následujících osách jsou zvýrazněny všechny uzly, které sledují kontextový uzel, ať už je to podřízený nebo potomek.
# 7) Následující sourozenec
Deník: Najít všechny uzly za kontextovým uzlem, které sdílejí stejného rodiče, a jsou sourozenci kontextového uzlu.
XPath: // div [@ class = ‘Mammal‘] / following-sibling :: div
Hlavní rozdíl mezi následujícím a následujícím sourozencem spočívá v tom, že následující sourozenec přebírá všechny sourozenecké uzly po kontextu, ale bude také sdílet stejného rodiče.
# 8) Předchozí
Deník: Trvá všechny uzly, které přicházejí před kontextový uzel. Může to být uzel rodiče nebo prarodiče.
Zde je kontextovým uzlem Bezobratlí a zvýrazněné čáry na obrázku výše jsou všechny uzly, které přicházejí před uzel Bezobratlých.
# 9) Předchozí sourozenec
Deník: Najít sourozence, který sdílí stejného rodiče jako kontextový uzel a který přichází před kontextovým uzlem.
Protože kontextovým uzlem je bezobratlý, jediným zvýrazněným prvkem je bezobratlý, protože tito dva jsou sourozenci a sdílejí stejného rodiče „Zvíře“.
# 10) Rodič
Deník: Chcete-li najít nadřazený prvek kontextového uzlu. Pokud je samotný kontextový uzel předkem, nebude mít nadřazený uzel a nenačte žádné odpovídající uzly.
Kontextový uzel č. 1: Savec
XPath: // div [@ class = ‘Mammal‘] / parent :: div
Vzhledem k tomu, že kontextovým uzlem je savec, je prvek s obratlovcem zvýrazněn, protože je rodičem savce.
Kontextový uzel č. 2: Zvíře
XPath: // div [@ class = ‘Animal‘] / parent :: div
Protože samotný zvířecí uzel je předkem, nebude zvýrazňovat žádné uzly, a proto nebyly nalezeny žádné odpovídající uzly.
čisté otázky a odpovědi pro nováčky
# 11) Já
Deník: K nalezení kontextového uzlu se používá já.
Kontextový uzel: Savec
XPath: // div [@ class = ‘Mammal‘] / self :: div
Jak vidíme výše, objekt Savec byl identifikován jednoznačně. Můžeme také vybrat text „Savec“ pomocí níže uvedené XPath.
XPath: // div [@ class = ‘Mammal‘] / self :: div / h4
Použití předcházejících a následujících os
Předpokládejme, že víte, že vaším cílovým prvkem je počet značek dopředu nebo dozadu z kontextového uzlu, můžete přímo zvýraznit tento prvek a ne všechny prvky.
Příklad: Předchozí (s indexem)
Předpokládejme, že náš kontextový uzel je „Jiný“ a chceme dosáhnout prvku „Savec“, k tomu bychom použili níže uvedený přístup.
První krok: Jednoduše použijte předcházející bez udání hodnoty indexu.
XPath: // div [@ class = ‘Other’] / předchozí :: div
To nám dává 6 shodných uzlů a my chceme pouze jeden cílený uzel „Mammal“.
Druhý krok: Zadejte hodnotu indexu [5] prvku div (počítáním nahoru z kontextového uzlu).
XPath: // div [@ class = ‘Other‘] / předchozí :: div [5]
Tímto způsobem byl úspěšně identifikován prvek „Savec“.
Příklad: následující (s indexem)
Předpokládejme, že náš kontextový uzel je „Savec“ a chceme dosáhnout prvku „Korýš“, použijeme k tomu níže uvedený přístup.
První krok: Jednoduše použijte následující bez udání hodnoty indexu.
XPath: // div [@ class = ‘Mammal‘] / následující :: div
To nám dává 4 odpovídající uzly a my chceme pouze jeden cílený uzel „Crustacean“
Druhý krok: Přiřaďte hodnotu indexu [4] prvku div (počítejte dopředu od kontextového uzlu).
XPath: // div [@ class = ‘Other‘] / sledování :: div [4]
Tímto způsobem byl prvek „korýš“ úspěšně identifikován.
Výše uvedený scénář lze také znovu vytvořit pomocí předcházející sourozenec a následující sourozenec uplatněním výše uvedeného přístupu.
Závěr
Identifikace objektu je nejdůležitějším krokem v automatizaci jakékoli webové stránky. Pokud můžete získat dovednost naučit se předmět přesně, je 50% vaší automatizace hotové. I když jsou k dispozici lokátory k identifikaci prvku, existují případy, kdy ani lokátory nedokážou identifikovat objekt. V takových případech musíme použít různé přístupy.
Zde jsme použili funkce XPath a os XPath k jedinečné identifikaci prvku.
Tento článek zakončujeme zapamatováním několika bodů:
- Neměli byste aplikovat osy „předků“ na kontextový uzel samotného kontextového uzlu, který je předkem.
- Neměli byste používat „nadřazené“ osy na kontextový uzel samotného kontextového uzlu, který je předkem.
- Neměli byste aplikovat „podřízené“ osy na kontextový uzel samotného kontextového uzlu, který je potomkem.
- Neměli byste aplikovat osy „potomka“ na kontextový uzel samotného kontextového uzlu, který je předkem.
- „Následující“ osy byste neměli aplikovat na kontextový uzel, je to poslední uzel ve struktuře dokumentu HTML.
- Neměli byste aplikovat „předchozí“ osy na kontextový uzel, je to první uzel ve struktuře dokumentu HTML.
Šťastné učení !!!
=> Navštivte zde exkluzivní sérii výukových kurzů selenu.
Doporučené čtení
- Funkce XPath pro dynamický XPath v selenu
- Cucumber Selenium Tutorial: Cucumber Java Selenium WebDriver Integration
- Selenium Locators: Identifikace webových prvků pomocí XPath v selenu (příklady)
- Úvod do Selenium WebDriver - Selenium Tutorial # 8
- Výukový program ChromeDriver Selenium: Testy selenového webdriveru v prohlížeči Chrome
- Implementace našeho prvního skriptu WebDriver - výuka selenu WebDriver # 10
- 30+ nejlepších návodů na selen: Naučte se selen se skutečnými příklady
- Manipulace s webovými tabulkami, rámy a dynamickými prvky v selenovém skriptu - Selenium Tutorial # 18