Jei paprastas „XPath“ nepavyksta rasti sudėtingo žiniatinklio elemento mūsų testo scenarijui, turime naudoti „XPath 1.0“ bibliotekos funkcijas. Derindami šias funkcijas galime sukurti tikslesnį XPath. Aptarkime 3 tokias funkcijas -
- Yra
- Brolis
- Protėvis
- IR ARBA
- Tėvas
- Prasideda su
- „XPath Axes“
Panagrinėkime juos išsamiai -
Ko sudėtyje yra () seleno?
„Selenium“ yra () yra „Xpath“ išraiškos funkcija, naudojama ieškant žiniatinklio elementų, kuriuose yra tam tikras tekstas. Mes galime išgauti visus elementus, atitinkančius nurodytą teksto vertę, naudodami „XPath on ()“ funkciją visame tinklalapyje. „XPath“ sudėtyje yra galimybė rasti elementą su daliniu tekstu.
Pvz. Čia mes ieškome inkaro. Sudėtyje yra teksto kaip „SAP M“.
"// h4 / a [yra (tekstas (),„ SAP M “)]]
PASTABA: Galite atlikti šį „XPath“ pratimą šiame http://demo.guru99.com/test/selenium-xpath.html
Kas yra „Selenium Webdriver“ brolis?
„ Brolis / seseris“ žiniatinklio tvarkyklėje yra funkcija, naudojama norint gauti žiniatinklio elementą, kuris yra brolis / sesuo, į pirminį elementą. Jei pagrindinis elementas yra žinomas, galima lengvai rasti arba rasti žiniatinklio elementą, kuris gali naudoti seleno žiniatinklio tvarkyklės Xpath išraiškos brolį atributą.
Brolis / sesuo XPath pavyzdys: Čia, remiantis „a“ brolio elementu, randame „h4“
"// div [@ class = 'canvas- graph'] // a [@href = '/ accounting.html'] [i [@ class = 'icon-usd']] / sekantis-brolis :: h4"
Protėvis : Norėdami rasti elementą pagal pagrindinį elementą, galime naudoti XPath protėvio atributą.
Leidžia suprasti šias 3 funkcijas naudojant pavyzdį -
Bandymo žingsniai
Pastaba: Nuo pamokos sukūrimo dienos „Guru99“ puslapis atnaujintas, todėl bandymams atlikti naudokite demonstracinę svetainę
- Eikite į http://demo.guru99.com/test/guru99home/
- Skyriuje „Keletas populiariausių mūsų kursų“ ieškokite visų žiniatinklio elementų, kurie yra „WebElement“, kurio tekstas yra „SELENIUM“, brolis.
- Elementą rasime naudodami „XPath“ teksto sudėtį, protėvio ir brolio ir sesers funkciją.
NAUDOJIMAS Sudėtyje yra ir „XPath Sibling“
importuoti java.util.List;importuoti java.util.concurrent.TimeUnit;importuoti org.openqa.selenium.By;importuoti org.openqa.selenium.WebDriver;importuoti org.openqa.selenium.WebElement;importuoti org.openqa.selenium.firefox.FirefoxDriver;importuoti org.testng.annotations.Test;viešoji klasė „SiblingAndParentInXpath“@Testpublic void testSiblingAndParentInXpath () {„WebDriver“ tvarkyklė;String driverPath = "C: \\ geckodriver.exe";System.setProperty ("webdriver.gecko.driver", driverPath);tvarkyklė = new FirefoxDriver ();vairuotojas.tvarkyti (). skirtasis laikas (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/guru99home/");// Paieškos elementas „Populiariuose kursuose“, kurie yra valdymo „SELENIUM“ broliai. Čia pirmiausia rasime h2, kurio tekstas yra „Keletas populiariausių mūsų kursų“, tada pereisime prie jo pirminio elemento, kuris yra „ div “, šio divo viduje rasime nuorodą, kurios tekstas yra„ SELENIUM “, tada pagaliau rasime visus šios nuorodos brolius ir seseris („ SELENIUM “)IšvardykitedateBox = driver.findElements (By.xpath ("// h2 [yra (text (), 'Keletas populiariausių mūsų kursų')] / parent :: div // div [// a [text () = 'SELENIUM']] / sekantis brolis :: div [@ class = 'rt-grid-2 rt-omega'] "));// Atsispausdinkite visus elementus, pavadintus „SELENIUM“, „Populiariuose kursuose“, broliai.skirta („WebElement webElement: dateBox“)System.out.println (webElement.getText ());}vairuotojas.uždaryti ();}}
Rezultatas bus toks:
Protėvis Seleno žiniatinklio tvarkyklėje
„Selenium Webdriver“ protėvis yra funkcija, naudojama surasti konkretaus nario protėvį nurodytame sluoksnyje. Galima aiškiai nurodyti protėvio lygį, kurį reikia grąžinti, arba protėvio lygį, palyginti su nario lygiu. Jis pateikia protėvio hierarchinių žingsnių skaičių, nustatydamas nurodytą protėvį, kurio nori vartotojas.
Dabar tarkime, kad turime ieškoti visų elementų skiltyje „Populiarus kursas“, naudodamas inkaro, kurio tekstas yra „SELENIUM“, protėvį.
Čia mūsų „xpath“ užklausa bus panaši
"//div[.//a[text()='SELENIUM']]/ancestor::div[@class='rt-grid-2 rt-omega '] / sekantis-brolis :: div"
Užbaigti kodą
importuoti java.util.List;importuoti java.util.concurrent.TimeUnit;importuoti org.openqa.selenium.By;importuoti org.openqa.selenium.Raktai;importuoti org.openqa.selenium.WebDriver;importuoti org.openqa.selenium.WebElement;importuoti org.openqa.selenium.firefox.FirefoxDriver;importuoti org.testng.annotations.Test;viešosios klasės „AncestorInXpath“@Testpublic void testAncestorInXpath () {„WebDriver“ tvarkyklė = nauja „FirefoxDriver“ ();vairuotojas.tvarkyti (). skirtasis laikas (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/guru99home/");// Ieškoti visų elementų skiltyje „Populiarūs kursai“// su inkaro protėviu, kurio tekstas yra „SELENIUM“IšvardykitedateBox = driver.findElements (By.xpath ("// div [.// a [text () = 'SELENIUM']] / protėvis :: div [@ class = 'rt-grid-2 rt- omega '] / sekantis brolis :: div "));// „Populiariuose kursuose“ atsispausdinkite visus elementus, vadinamus „SELENIUM“.skirta („WebElement webElement: dateBox“)System.out.println (webElement.getText ());}vairuotojas.mesti ();}}
Rezultatas atrodys kaip
Naudojant AND ir OR
Naudodami AND ir OR galite įdėti 2 sąlygas į mūsų XPath išraišką.
- IR atveju abi 2 sąlygos turėtų būti teisingos, tada tik jis suranda elementą.
- ARBA bet kuri iš 2 sąlygų turėtų būti teisinga, tada tik ji randa elementą.
Čia mūsų XPath užklausa bus panaši
Xpath = // * [@ type = 'pateikti' ARBA @ vardas = 'btnReset']
Xpath = // įvestis [@ type = 'pateikti' ir @ name = 'btnLogin']
Testo žingsniai:
- Eikite į http://demo.guru99.com/v1/
- Skyriuje naudosite pirmiau pateiktą demonstracinę svetainę ieškodami elemento su skirtingomis XPath funkcijomis.
Elementą rasite naudodami ašis AND ir OR, pagrindinę, pradžios ir XPath ašis
IR ARBA Pavyzdys
importuoti org.openqa.selenium.By;importuoti org.openqa.selenium.WebDriver;importuoti org.openqa.selenium.WebElement;importuoti org.openqa.selenium.chrome.ChromeDriver;viešoji klasė AND_OR {public static void main (String [] argumentuoja) {„WebDriver“ tvarkyklė;„WebElement“ w, x;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");tvarkyklė = naujas „ChromeDriver“ ();// Paleiskite programądriver.get ("https://www.guru99.com/");// Paieškos elementas xpath naudojant ORw = driver.findElement (By.xpath ("// * [@ type = 'pateikti' ARBA @ name = 'btnReset']"));// Spausdinti elemento tekstąSystem.out.println (w.getText ());// Paieškos elementas naudojant AND xpathx = driver.findElement (By.xpath ("// įvestis [@ type = 'pateikti' ir @ name = 'btnLogin']"));// Atspausdinkite ieškomo elemento tekstąSystem.out.println (x.getText ());// Uždarykite naršyklęvairuotojas.mesti ();}}
Kas yra tėvas selene?
„Parent in Selenium“ yra metodas, naudojamas norint gauti dabartinio mazgo, pasirinkto tinklalapyje, pirminį mazgą. Tai labai naudinga tuo atveju, kai pasirenkate elementą ir turite gauti pagrindinį elementą naudodami „Xpath“. Šis metodas taip pat naudojamas norint gauti tėvų tėvus.
Čia mūsų XPath užklausa bus panaši
Xpath = // * [@ id = 'rt-feature'] // pagrindinis :: div
XPath naudojant Tėvą
importuoti org.openqa.selenium.By;importuoti org.openqa.selenium.WebDriver;importuoti org.openqa.selenium.WebElement;importuoti org.openqa.selenium.chrome.ChromeDriver;viešosios klasės tėvai {public static void main (String [] argumentuoja) {„WebDriver“ tvarkyklė;„WebElement w“;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");tvarkyklė = naujas „ChromeDriver“ ();// Paleiskite programądriver.get ("https://www.guru99.com/");// Ieškokite elemento naudodami PARENTw = driver.findElement (By.xpath ("// * [@ id = 'rt-feature'] // parent :: div"));// Atspausdinkite ieškomo elemento tekstąSystem.out.println (w.getText ());// Uždarykite naršyklęvairuotojas.mesti ();}}
Prasideda su
Naudodamiesi funkcija Pradėti su, galite rasti elementą, kurio atributas dinamiškai keičiasi atnaujinant ar atliekant kitas operacijas, pavyzdžiui, spustelėkite, pateikite ir pan.
Čia mūsų XPath užklausa bus panaši
Xpath = // etiketė [prasideda nuo (@ id, 'žinutė')]
importuoti org.openqa.selenium.By;importuoti org.openqa.selenium.WebDriver;importuoti org.openqa.selenium.WebElement;importuoti org.openqa.selenium.chrome.ChromeDriver;viešoji klasė „StartsWith“public static void main (String [] argumentuoja) {„WebDriver“ tvarkyklė;„WebElement w“;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");tvarkyklė = naujas „ChromeDriver“ ();// Paleiskite programądriver.get ("https://www.guru99.com/");// Ieškokite elemento naudodami pradžią suw = driver.findElement (By.xpath ("// etiketė [prasideda nuo (@ id, 'žinutė')]"));// Atspausdinkite ieškomo elemento tekstąSystem.out.println (w.getText ());// Uždarykite naršyklęvairuotojas.mesti ();}}
„Xpath“ ašys
Naudodami „XPath“ ašis, tinklalapyje galite rasti dinamiškų ir labai sudėtingų elementų. XPath ašyse yra keli elemento radimo būdai. Čia aptarsime keletą metodų.
ši funkcija grąžins tiesioginį konkretaus komponento elementą.
Čia mūsų XPath užklausa bus panaši
Xpath = // * [@ type = 'text'] // seka :: įvestį
„XPath“ naudodamiesi šiais būdais
importuoti org.openqa.selenium.By;importuoti org.openqa.selenium.WebDriver;importuoti org.openqa.selenium.WebElement;importuoti org.openqa.selenium.chrome.ChromeDriver;viešoji klasė, sekanti {public static void main (String [] argumentuoja) {„WebDriver“ tvarkyklė;„WebElement w“;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");tvarkyklė = naujas „ChromeDriver“ ();// Paleiskite programądriver.get ("https://www.guru99.com/");// Ieškokite elemento naudodami „Follow“ metodąw = driver.findElement (By.xpath ("// * [@ type = 'text'] // sekantis :: įvestis"));// Atspausdinkite ieškomo elemento tekstąSystem.out.println (w.getText ());// Uždarykite naršyklęvairuotojas.mesti ();}}
Ankstesnis: ši funkcija grąžins ankstesnį konkretaus elemento elementą.
Čia mūsų XPath užklausa bus panaši
Xpath = // * [@ type = 'pateikti'] // prieš :: įvestis
XPath naudojant ankstesnį
importuoti org.openqa.selenium.By;importuoti org.openqa.selenium.WebDriver;importuoti org.openqa.selenium.WebElement;importuoti org.openqa.selenium.chrome.ChromeDriver;visuomenės klasė prieš {public static void main (String [] argumentuoja) {„WebDriver“ tvarkyklė;„WebElement w“;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");tvarkyklė = naujas „ChromeDriver“ ();// Paleiskite programądriver.get ("https://www.guru99.com/");// Ieškokite elemento naudodami ankstesnį metodąw = driver.findElement (By.xpath ("// * [@ type = 'pateikti'] // ankstesnė :: įvestis"));// Atspausdinkite ieškomą elementąSystem.out.println (w.getText ());// Uždarykite naršyklęvairuotojas.mesti ();}}
d) Palikuonis: ši funkcija grąžins konkretaus elemento palikuonio elementą.
Čia mūsų XPath užklausa bus panaši
Xpath = // * [@ id = 'rt-feature'] // palikuonis :: a
XPath naudojant palikuonį
importuoti org.openqa.selenium.By;importuoti org.openqa.selenium.WebDriver;importuoti org.openqa.selenium.WebElement;importuoti org.openqa.selenium.chrome.ChromeDriver;visuomenės klasės palikuonis {public static void main (String [] argumentuoja) {„WebDriver“ tvarkyklė;„WebElement w“;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");tvarkyklė = naujas „ChromeDriver“ ();// Paleiskite programądriver.get ("https://www.guru99.com/");// Ieškokite elemento naudodami palikuonių metodąw = driver.findElement (By.xpath ("// * [@ id = 'rt-feature'] // palikuonis :: a"));// Atspausdinkite ieškomą elementąSystem.out.println (w.getText ());// Uždarykite naršyklęvairuotojas.mesti ();}}
Santrauka
- Yra atvejų, kai norint rasti elementą negalima naudoti įprasto XPath. Tokioje situacijoje mums reikia skirtingų funkcijų nei „xpath“ užklausoje.
- Yra keletas svarbių „XPath“ funkcijų, tokių kaip „XPath“ yra, tėvai, protėviai, sekantys broliai ir kt.
- Šių funkcijų pagalba galite sukurti sudėtingas XPath išraiškas.