ultimate xpath writing cheat sheet tutorial with syntax
Top 20 způsobů psaní Ultimate XPATH pro JAKÝKOLI typ webového prvku (XPATH nikdy nebude neplatný):
Webová aplikace se skládá z různých typů webových prvků, jako je webový prvek pro kliknutí na tlačítko, zadání webového prvku pro psaní textu, rozevírací seznam, přepínače atd.
Tyto webové prvky se také nazývají značky nebo uzly.
Pokud jde o automatizaci webových aplikací, začíná to napsáním automatizačního skriptu, který najde webový prvek, provede s ním akci, například klikne na tlačítko, zadá text do vstupního pole, zaškrtne políčko, vybere přepínač, posouvejte nahoru nebo dolů a nakonec ověřte očekávané chování v pořadí akce.
Co se naučíte:
- Co je XPath a jak to vypadá?
- Nejlepší 20 způsobů psaní XPath pro libovolný webový prvek
- # 1) Zpětné vyhledávání
- # 2) Používání proměnných a vlastních hodnot
- # 3) Používání značek „XML“, „AND“ atd
- # 4) Použití atributů a tabulky XPATH
- # 5) Použití atributů, tabulek a textu
- # 6) Generování XPATH pomocí vnořených atributů
- # 7) Generování XPath kombinací atributů, divů a tlačítek
- # 8) Generování XPATH pomocí OBSAHŮ, ZPĚTNÉHO VYHLEDÁVÁNÍ atd.
- # 9) Generování XPath pomocí Relative, CONTAINS, REVERSE, FOLLOWING SIBLING atd.
- # 10) XPath Generation using Attributes, Contains, Reverse, Preceding-Sibling, Divs, and Span
- # 11) Používání atributů, značek XML atd.
- # 12) Generování XPath tím, že se nebudete dívat na celou stránku, ale místo toho se díváte do všech odkazů a obsahuje
- # 13) Používání obsahuje a atributy
- # 14) Používání atributů, sledování sourozenců a potomků
- # 15) Používání atributů, sledování sourozenců, potomků a textu
- # 16) Použití záhlaví a textu
- # 17) Používání textu záhlaví, sledování sourozenců, cesta atd.
- # 18) Používání atributů, obsahuje a předchází sourozence
- # 19) Hledáte rozevírací seznam pomocí atributu Id, nějakého konkrétního textu a zpětného vyhledávání
- # 20) Kombinace atributu „id“ a hledání odkazu se specifickým textem
- Závěr
- Doporučené čtení
Co je XPath a jak to vypadá?
Najít prvek je jako najít něčí dům na mapě. Jediný způsob, jak můžeme najít domov přítele bez jakékoli externí pomoci, je, že bychom měli mít mapu a vědět, co najít (dům).
Abychom v tomto případě uvedli tuto analogii, mapa se použije jako DOM (značky HTML, JavaScript atd.), Kde existují všechny webové prvky, spolu se specifickým webovým prvkem, který chceme najít.
Jakmile je nalezena jedinečná adresa nebo cesta prvku, automatizační skript na něm poté provede některé akce na základě testovacího scénáře. Například, chcete ověřit adresu URL stránky, která se otevře po kliknutí na tlačítko.
Není však jednoduché najít jedinečnou adresu / cestu webového prvku, protože by mohly existovat podobné značky, stejné hodnoty atributů, identické cesty, díky nimž je obtížné vytvořit přesnou jedinečnou adresu webového prvku s názvem „XPATH“.
Zde se ponoříme do několika skvělých a účinných technik, jak vygenerovat platný a jedinečný XPATH pro jakýkoli typ webového prvku.
Doporučené čtení => Identifikujte webové prvky pomocí XPath v selenu
Někdy můžete snadno vytvořit XPath pomocí rozšíření prohlížeče, ale v mém testování automatizace během své kariéry jsem čelil nespočetným situacím, kdy tradiční rozšíření prohlížeče nefungují a musíte si pomocí své vlastní kreativity vymyslet vlastní přizpůsobené XPaths. Jsem si jist, že podobné situace máte nebo budete čelit.
V tomto tutoriálu se podíváme na 20 nejlepších způsobů, jak vytvořit konečný XPath pro webový prvek takovým způsobem, že i když se váš kód změní, váš XPath zůstane v platnosti po celou dobu (pokud vývojář přepíše celý funkce / modul).
nejlepší bezplatný video převodník pro Windows 7
Když budete znát všechny tyto techniky, stanete se mistrem psaní vlastního XPath a budete schopni psát zabijácké XPaths s velmi malou pravděpodobností, že se stanete neplatnými.
Nejprve začneme s porozuměním syntaxi XPath a definujme každou z jeho částí.
Níže uvedený obrázek ukazuje, jak bude XPath vypadat, spolu s popisem každé části:
- //: Vyberte aktuální uzel, jako je vstup, div atd.
- Název štítku: Název tagu webového prvku / uzlu
- @: Vyberte atribut
- Atribut: Název atributu uzlu / konkrétního webového prvku
- Hodnota: Hodnota atributu
Jen se chci podělit o pár tipů, že 80% času můj testovací automatizační skript selhal kvůli XPath. To je způsobeno tím, že pro zadaný XPath existuje více webových prvků, nebo XPath není platný nebo stránka ještě nebyla načtena.
Kdykoli tedy váš testovací případ selže:
- Zkopírujte XPath.
- Vyhledejte jej v prohlížeči (okno F12 nebo okno vývojářského nástroje) v modelu DOM a ověřte, zda je platný nebo ne (viz obrázek níže).
Profesionální typ 1: Ujistěte se, že je jedinečný a při hledání dvakrát v DOM se neobjeví žádný jiný webový prvek.
Profesionální typ 2: Někdy se vyskytne problém s načasováním, což znamená, že váš webový prvek / stránka ještě není načtena, když ji hledal skript, proto přidejte nějakou čekací dobu a proveďte test znovu.
Profesionální typ 3: Před vyhledáním webového prvku zkuste vytisknout celý DOM. Tímto způsobem poznáte, že při pohledu do konzoly zjistíte, zda váš webový prvek v DOM existuje nebo ne.
Než se ponoříme hlouběji do vyhledávání XPath, jedna důležitá věc, kterou chci sdílet, je, že pokud máte přímý přístup k vývojovému týmu nebo pokud se váš tým nachází tam, kde jste, požádejte svůj vývojový tým, aby vám poskytl jedinečná ID v každý webový prvek nebo alespoň ty, které chcete použít pro automatizaci, a to vám ušetří spoustu času.
Pokud to není možné, možná budete muset použít svou kreativitu a přijít s vlastními přizpůsobenými XPaths, a čeho se nyní budeme učit.
Nejlepší 20 způsobů psaní XPath pro libovolný webový prvek
Pojďme se ponořit do vytváření 20 nejlepších způsobů zabití XPath.
# 1) Zpětné vyhledávání
Řekněme, že chcete kliknout na tlačítko a podobné tlačítko existuje. Obě tlačítka mají atributy id, ale jsou dynamická a žádný z atributů není v obou prvcích tlačítek jedinečný.
V níže uvedeném scénáři chceme kliknout na tlačítko „Nastavení“ v „Testovat interaktivně“.
Kód
Pokud se podíváte na tlačítka „Nastavení“, oba kódy jsou podobné. Při použití tradičních způsobů, jako je id, jméno, hodnota, obsahuje atd., Nebude fungovat žádný z nich.
// * [contains (text (), ‘Setting‘)], Výsledkem budou dva webové prvky. Proto to není jedinečné.
Takže tady je konečná strategie,
>> Nejprve najděte nejbližší značku, která je jedinečná, a v tomto případě je
XPATH: “//*[@id='rcTEST']
>> Za druhé, najděte nejbližší webový prvek zamýšlenému webovému prvku, který v tomto případě obsahuje (text (), „TEST Interactive“). Nyní jsme na stejném místě, kde existuje tlačítko „Nastavení“, ale abychom na něj klikli, musíme nejprve přejít na hlavní pomocí dvojitých teček, jak je znázorněno níže.
XPATH: “//*[@id='rcTEST']//*[contains(text(), 'TEST Interactive')]/..
>> Jak vidíte, jsme na úrovni, která má druhý webový prvek jako tlačítko „Nastavení“. Toto má dvě tlačítka a chceme přejít na druhé tlačítko, kterým je tlačítko „Nastavení“. Přidáním tlačítka „/ tlačítko [2]“ na konci můžeme získat náš jedinečný XPATH pro tlačítko „Nastavení“, jak je uvedeno níže.
Závěrečná XPATH:
“//*[@id='rcTEST']//*[contains(text(), 'TEST Interactive')]/../button[2]”
Zde je další způsob generování, pokud si myslíte, že by mohli změnit typ webového prvku z „tlačítka“ na něco jiného.
“//*[@id='rcTEST']//*[contains(text(), 'TEST Interactive')]/..//*[contains(text(), 'Setting')]”
nebo pomocí „následného sourozence“
“//*[@id='rcTEST']//*[contains(text(), 'TEST Interactive')]/following-sibling::button”
# 2) Používání proměnných a vlastních hodnot
Řekněme, že existuje webová aplikace, která má funkci FTP („File Transfer Protocol“) pro nahrávání / stahování souborů a máte testovací případ ke stažení konkrétního souboru kliknutím na odkaz ke stažení.
Nejprve můžeme definovat název souboru, který hledáme, jako proměnnou.
Řetězec expectfileName = “Test1”;
Nyní pomocí XPATH můžeme najít skutečný název souboru.
“String actualFileName = WebDriverAccess.getDriver().findElement (By.xpath('//*'+fileName +'/tr/td[1]')).getAttribute('title');”
Ve výše uvedeném XPath přejde do konkrétního řádku a prvního sloupce… „/ tr / td [1] .getAttribute („ title “) („ název “)“ a získá hodnotu atributu title. Můžeme uložit skutečný název souboru do jiné proměnné.
Jakmile máme očekávané i skutečné názvy souborů, můžeme oba porovnat, a pokud se oba shodují, můžeme jednoduše kliknout na jeho odkaz ke stažení.
(if acutalFileName == expectedFileName) { WebDriverAccess.getDriver().findElement(By.xpath('//*'+fileName +'/tr/td[4]')).click(); }
Můžeme také vytvořit smyčku přes každý řádek a neustále ověřovat název souboru, dokud jej nenajdete.
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++; }
Můžeme vygenerovat jedinečný XPATH pomocí přizpůsobených značek a přidat další podmínky.
Například, řekněme, že náš zamýšlený webový prvek existuje v hlavní značce a existuje několik adresových značek, ale chcete najít jen konkrétní. Všechny štítky s adresami mají atribut třídy, takže můžeme začít s.
// address[@class='ng-scope ng-isolate-scope']
Všimli jsme si, že náš zamýšlený webový prvek je ve značce, která má nějaký text nazvaný „Testování“.
// address[@class='ng-scope ng-isolate-scope']//div[contains(.,'Testing')
Zjistili jsme, že ve výsledku bylo nalezeno několik webových prvků. Proto, abychom to udělali jedinečnějším, můžeme přidat další podmínky, například „id“, které nás nakonec nasměruje na webový prvek, který hledáme.
// address[@class='ng-scope ng-isolate-scope']//div[contains(.,Testing') and @id='msgTitle']
# 4) Použití atributů a tabulky XPATH
Předpokládejme, že chceme psát do webového prvku, který je umístěn uvnitř tabulky a tabulka je umístěna uvnitř elementu formuláře.
Ve formuláři DOM můžeme najít všechny formuláře s názvem „myForm“.
“//*[@name='myForm']”
Nyní ve všech formulářích najděte tabulku s id ‚tbl_testdm‘.
'//*[@name='myForm']//table[@id='tbl_ testdm’]”
V tabulce přejděte na konkrétní řádek a sloupec.
'//*[@name='myForm']//table[@id='tbl_ testdm’]/tbody/tr/td[6]/”
Pokud v buňce existuje více vstupů, najděte vstup, kde hodnota = „Otevřít RFS“, a tím získáte finální XPath pole.
//*[@name='myForm']//table[@id='tbl_ testdm’]/tbody/tr/td[6]/ input[@value='Open RFS']'
# 5) Použití atributů, tabulek a textu
Předpokládejme, že váš zamýšlený webový prvek leží v tabulce panelu a obsahuje nějaký společný text.
sloučit seřadit pseudokód c ++
Nejprve začněte panelem, který má jedinečný atribut, který je v tomto případě „TITLE“.
//*[@title=’Songs Lis Applet']
Nyní procházejte všemi značkami tabulky.
//*[@title=’Songs Lis Applet']//table
Ve všech tabulkách najděte sloupec s textem „Autor“.
Konečný XPath by vypadal jako:
//*[@title=’Songs List Applet']//table//td[contains(text(),'Author')]
# 6) Generování XPATH pomocí vnořených atributů
XPath cílového webového prvku lze také generovat pomocí vnořených atributů. Například, v takovém případě bude hledat konkrétní atribut napříč DOM a poté v něm hledat jiný atribut.
//*[@id='parameters']//*[@id='testUpdateTime']')
# 7) Generování XPath kombinací atributů, divů a tlačítek
Například, v níže uvedeném XPath jsem byl schopen najít cílový webový prvek pomocí id (relativní XPath), některých značek div a tlačítka.
“//*[@id='MODEL/PLAN']/div[1]/div[2]/div[1]/div[1]/widget/section/div[1]/div/div[1]/div/div/button[1]'
# 8) Generování XPATH pomocí OBSAHŮ, ZPĚTNÉHO VYHLEDÁVÁNÍ atd.
Jednou jsem měl rozevírací seznam bez přímé identifikace. Musel jsem použít CONTAINS, REVERSE, DIVs, atributy, abych přišel s finální XPATH, jak je uvedeno níže.
//*[contains(text(),'Watch Dial)]/../div/select[@data-ng-model='context.questions [subqts.subHandleSubId]']'),
# 9) Generování XPath pomocí Relative, CONTAINS, REVERSE, FOLLOWING SIBLING atd.
Měl jsem situaci, že aplikace zobrazuje graf a každá hodnota grafu musela být ověřena. Bohužel však každá hodnota neměla žádnou jedinečnou identifikaci, takže jsem přišel s konečnou XPATH, jak je ukázáno níže, pro jednu hodnotu grafu, která kombinuje relativní, obsahuje, reverzní, následující sourozence a div tagy.
//*[@id='RESEARCH/PLAN']//*[contains(@id, 'A4')]/../../following-sibling::div[1]/div[1]/span[1]/span[1]
# 10) XPath Generation using Attributes, Contains, Reverse, Preceding-Sibling, Divs, and Span
Jednou jsem musel ověřit různá data alarmu a každá hodnota alarmu byla zobrazena na základě konkrétního výpočtu nebo časování. Aby bylo možné zachytit každou hodnotu, musel jsem přijít s níže XPATH, který používá atributy, obsahuje, reverzní, předcházející sourozenec, divs a span tagy.
//*[@id='ALARMDATA']//*[contains(@id, 'AFC2')]/../../preceding-sibling::div[1]/div[1]/span[1]/span[1]
# 11) Používání atributů, značek XML atd.
V níže uvedeném XPATH, atributech a značkách XML se používá sekvence k vytvoření konečné jedinečné adresy webového prvku.
//*[@id='RESEARCH/REVIEW'] //widget/section/div[1]/div/div[2]/div[1]/div[3]/div[1]//span[@class='details']
# 12) Generování XPath tím, že se nebudete dívat na celou stránku, ale místo toho se díváte do všech odkazů a obsahuje
Níže uvedená cesta XPath bude hledat pouze odkazy na celé stránce, které obsahují text jako „Ruční zadání dat parametrů“.
//a[contains(.,'Parameter Data Manual Entry')]
# 13) Používání obsahuje a atributy
//*[contains(@style,'display: block; top:')]//input[@name='daterangepicker_end']
# 14) Používání atributů, sledování sourozenců a potomků
//*[@id='dropdown-filter-serviceTools']/following-sibling::ul/descendant::a[text()='Notepad']
# 15) Používání atributů, sledování sourozenců, potomků a textu
//*[@id='dropdown-filter-service tools'] /following-sibling::ul/descendant::a[text()='Trigger Dashboard']
# 16) Použití záhlaví a textu
Pokud je webovým prvkem záhlaví s nějakým konkrétním textem, může být XPath následující:
//h3[text()='Internal Debrief']
# 17) Používání textu záhlaví, sledování sourozenců, cesta atd.
//h3[contains(text(),'Helium Level')]/following-sibling::div/label/input
# 18) Používání atributů, obsahuje a předchází sourozence
Jakmile jsem měl rozpětí, které nemělo žádný jedinečný atribut, vytvořil jsem XPATH kombinací absolutních, obsahuje, předcházejících sourozenců a další absolutní cesty.
//div[div[p[contains(text(),'Status')]]]/preceding-sibling::div/div/span[3]/span
# 19) Hledáte rozevírací seznam pomocí atributu Id, nějakého konkrétního textu a zpětného vyhledávání
//*[@id='COUPLING']//*[contains(text(),'COUPLE Trend')]/../div/select
# 20) Kombinace atributu „id“ a hledání odkazu se specifickým textem
//*[@id='ffaHeaderDropdown']//a[contains(text(),'Start Workflow')]
Závěr
Pokud jde o psaní zabijáckého XPATH, opravdu záleží na tom, jak dobře kódu rozumíte a analyzujete. Čím více kódu rozumíte, tím více způsobů najdete při psaní účinných XPATH.
Prvním krokem při psaní XPath je najít nejbližší jedinečný webový prvek k cílovému webovému prvku a stále se přibližovat pomocí různých výše diskutovaných technik, jako jsou atributy, DIV, následující, obsahuje atd.
Nakonec bychom to řekli znovu, že vám opravdu usnadní život, pokud požádáte svůj vývojový tým o přidání jedinečných ID do všech webových prvků, které vás zajímají.
Kdykoli začíná cyklus sprintu nebo práce na nových požadavcích a tým je sdílen s novými maketami, vždy projdu všemi maketami a přemýšlím o potenciálních testovacích případech automatizace v mé mysli, připravím seznam všech potenciálních webových prvků, které budou použity v automatizačních testech a připravit si vlastní ID.
Jakmile je dokončen seznam všech webových prvků spolu s mými navrhovanými ID, předem bych je sdílel s vývojářem, který bude použit ve vývojovém kódu. Tímto způsobem bych vždy získal jedinečná ID tím, že jsem svou XPATH psací bitvu ulehčil.
Níže je uveden kombinovaný seznam různých způsobů zápisu XPATH:
- „// * [@ id =‘ rcTEST ’] // * [obsahuje (text (),‚ TEST Interactive ‘)] /../ tlačítko [2]“
- „// * [@ id =‘ rcTEST ’] // * [obsahuje (text (),‚ TEST Interactive ')] /..//* [obsahuje (text (), ‚nastavení‘)] “
- „// * [@ id =‘ rcTEST ’] // * [obsahuje (text (),‚ TEST Interactive ‘)] / následující sourozenec :: tlačítko“
- 'String actualFileName = WebDriverAccess.getDriver (). FindElement (By.xpath (' // * '+ fileName +' / tr / td [1] ')). GetAttribute (' title ');'
- WebDriverAccess.getDriver (). FindElement (By.xpath („// *“ + název_souboru + “/ tr / td [4]”)). Click ();
- '// adresa [@ class = 'ng-scope ng-isolate-scope'] // div [obsahuje (., Testování ') a @ id =' msgTitle ']'
- „// * [@ name =‘ myForm ’] // tabulka [@ id =‘ tbl_ testdm ’] / tbody / tr / td [6] /
- vstup [@ value = ‘Otevřít RFS’] “
- „// * [@ title =‘ Songs List Applet ‘] // tabulka // td [obsahuje (text (),‚ autor ‘)]“
- „// * [@ id =‘ parametry ‘] // * [@ id =‘ testUpdateTime ’]”) “
- “// * [@ id = 'MODEL / PLÁN'] / div [1] / div [2] / div [1] / div [1] / widget / sekce / div [1] / div / div [1] / div / div / tlačítko [1] ”
- „// * [contains (text (),‘ Watch Dial)] /../ div / select [@ data-ng-model = ‘context.questions [subqts.subHandleSubId]“] “),“
- “// * [@ id = 'VÝZKUM / PLÁN'] // * [obsahuje (@id, 'A4')] /../../ následující-sourozenec :: div [1] / div [1] / rozpětí [1] / rozpětí [1] “
- “// * [@ id = 'ALARMDATA'] // * [obsahuje (@id, 'AFC2')] /../../ předcházející sourozenec :: div [1] / div [1] / span [ 1] / rozpětí [1] “
- “// * [@ id = 'VÝZKUM / RECENZE'] // widget / sekce / div [1] / div / div [2] / div [1] / div [3] / div [1] // span [ @ class = 'details'] ”
- „//A[contains(.,’Parameter Data Manual Entry‘)] “
- „// * [contains (@ style,‘ display: block; top: ‘)] // input [@ name =‘ daterangepicker_end ‘]“
- '// * [@ id = 'dropdown-filter-serviceTools'] / following-sibling :: ul / descendant :: a [text () = 'Poznámkový blok']“
- '// * [@ id = 'dropdown-filter-serviceTools'] / following-sibling :: ul / descendant :: a [text () = 'Trigger Dashboard']“
- “// h3 [text () =‘ Internal Debrief ’]”
- „// h3 [contains (text (),‘ Helium Level ‘)] / following-sibling :: div / label / input“
- „// div [div [p [contains (text (),‘ Status ‘)]]] / prior-sibling :: div / div / span [3] / span“
- „// * [@ id =‘ COUPLING ’] // * [contains (text (),, COUPLE Trend‘)] /../ div / select
- „// * [@ id =‘ ffaHeaderDropdown ‘] // a [obsahuje (text (),‚ Zahájit pracovní postup ‘)]“ “
Doufám, že tento informativní článek obohatil vaše znalosti psaní XPaths.
Autor Bio: Tento článek je napsán Adnanem Arifem, IT profesionálem s různými zkušenostmi a dovednostmi ve své kariéře trvající více než 9 let.
Doporučené čtení
- Výukové programy pro zatmění do hloubky pro začátečníky
- Výukový program Python DateTime s příklady
- Syntaxe příkazů Unix Cat, možnosti s příklady
- Unixový příkaz pro řazení se syntaxí, možnostmi a příklady
- Výukový program pro skriptování prostředí Unix s příklady
- Výukový program pro vyhledání prvku selen pomocí textu s příklady
- Výukový program pro hlavní funkce Pythonu s praktickými příklady
- Postprocesor Xpath Extractor v JMeteru