Ako jednostavni XPath ne može pronaći komplicirani web element za našu testnu skriptu, trebamo koristiti funkcije iz biblioteke XPath 1.0. Kombinacijom ovih funkcija možemo stvoriti specifičniji XPath. Razgovarajmo o 3 takve funkcije -
- Sadrži
- Brat ili sestra
- Predak
- I ILI
- Roditelj
- Počinje sa
- XPath sjekire
Proučimo ih detaljno -
Što je sadrži () u selenu?
contains () u Seleniju je funkcija unutar izraza Xpath koja se koristi za traženje web elemenata koji sadrže određeni tekst. Sve elemente koji se podudaraju s danom vrijednošću teksta možemo izvući pomoću funkcije XPath contains () na cijeloj web stranici. Sadrži u XPathu ima mogućnost pronalaska elementa s djelomičnim tekstom.
Pr. Ovdje tražimo sidro .sadrži tekst kao 'SAP M'.
"// h4 / a [sadrži (tekst (), 'SAP M')]"
NAPOMENA: Sljedeću vježbu XPath možete vježbati na ovom http://demo.guru99.com/test/selenium-xpath.html
Što je brat ili sestra u programu Selenium Webdriver?
Iste razine selena Webdriver je funkcija se koristi za dohvaćanje web element koji je brat u matični element. Ako je nadređeni element poznat, tada se web element može lako pronaći ili locirati koji može koristiti atribut brata ili sestre izraza Xpath u selenium webdriver.
Primjer srodne braće i sestara u XPathu: Ovdje na osnovu srodnog elementa 'a' nalazimo 'h4'
"// div [@ class = 'canvas- graph'] // a [@href = '/ accounting.html'] [i [@ class = 'icon-usd']] / following-sibling :: h4"
Predak : Da bismo pronašli element na temelju nadređenog elementa, možemo koristiti atribut pretka XPath.
Razumijemo ove 3 funkcije na primjeru -
Ispitni koraci
Napomena: Od datuma stvaranja vodiča, početna stranica Guru99 je ažurirana, pa umjesto toga koristite demo stranicu za pokretanje testova
- Idite na http://demo.guru99.com/test/guru99home/
- U odjeljku "Nekoliko naših najpopularnijih tečajeva" pretražite sve Web elemente koji su brata ili sestre WebElementa čiji je tekst "SELENIUM"
- Naći ćemo element pomoću XPath teksta koji sadrži, pretka i funkciju sestre.
KORIŠTENJE Sadrži i XPath sibling
import java.util.List;import java.util.concurrent.TimeUnit;uvoz org.openqa.selenium.By;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.WebElement;uvoz org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;javna klasa SiblingAndParentInXpath {@Testjavna void testSiblingAndParentInXpath () {Upravljački program za WebDriver;String driverPath = "C: \\ geckodriver.exe";System.setProperty ("webdriver.gecko.driver", driverPath);upravljački program = novi FirefoxDriver ();driver.manage (). timeouts (). implicitnoWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/guru99home/");// Element pretraživanja unutar 'Popularnog tečaja' koji su brata i kontrola 'SELENIUM', Ovdje ćemo prvo pronaći h2 čiji je tekst '' Nekoliko naših najpopularnijih tečajeva ', a zatim prelazimo na njegov nadređeni element koji je' div ', unutar ovog div-a naći ćemo vezu čiji je tekst' SELENIUM ', a zatim ćemo napokon pronaći sve elemente braće i sestara ove veze (' SELENIUM ')PopisdateBox = driver.findElements (By.xpath ("// h2 [sadrži (tekst (), 'Nekoliko naših najpopularnijih tečajeva')] / nadređeni :: div // div [// a [tekst () = 'SELENIUM']] / slijedeći brat ili sestra :: div [@ class = 'rt-grid-2 rt-omega'] "));// ispisati sve koji pripadaju elementu koji je nazvan 'SELENIUM' u 'Popularni tečaj'za (WebElement webElement: dateBox) {System.out.println (webElement.getText ());}driver.close ();}}
Izlaz će biti kao:
Predak u Selenium Webdriveru
Predak u Selenium Webdriver je funkcija koja se koristi za pronalaženje pretka određenog člana na navedenom sloju. Razina pretka koji se vraća ili razina pretka u odnosu na razinu člana mogu se izričito odrediti. Vraća broj hijerarhijskih koraka od pretka, locirajući određenog pretka kojeg korisnik želi.
Sada pretpostavimo da moramo pretražiti sve elemente u odjeljku "Popularni tečaj" uz pomoć pretka sidra čiji je tekst "SELENIUM"
Ovdje će naš upit xpath biti sličan
"//div[.//a[text()='SELENIUM']]/ancestor::div[@class='rt-grid-2 rt-omega '] / following-sibling :: div"
Potpuni kod
import java.util.List;import java.util.concurrent.TimeUnit;uvoz org.openqa.selenium.By;uvoz org.openqa.selenium.Keys;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.WebElement;uvoz org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;javna klasa AncestorInXpath {@Testjavna void testAncestorInXpath () {Upravljački program za WebDriver = novi FirefoxDriver ();driver.manage (). timeouts (). implicitnoWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/guru99home/");// Pretraži sve elemente u odjeljku "Popularni tečaj"// uz pomoć pretka sidra čiji je tekst 'SELENIUM'PopisdateBox = driver.findElements (By.xpath ("// div [.// a [text () = 'SELENIUM']] / predak :: div [@ class = 'rt-grid-2 rt- omega '] / slijedeći brat ili sestra :: div "));// ispisati sve koji su rođeni od elementa nazvanog 'SELENIUM' u 'Popularni tečaj'za (WebElement webElement: dateBox) {System.out.println (webElement.getText ());}driver.quit ();}}
Izlaz će izgledati kao-
Korištenje AND i OR
Korištenjem AND i OR u naš XPath izraz možete staviti 2 uvjeta.
- U slučaju AND i oba 2 uvjeta trebaju biti istinita, onda samo element pronalazi.
- U slučaju OR bilo koji od dva uvjeta trebao bi biti istinit, tada samo on pronalazi element.
Ovdje će naš XPath upit biti sličan
Xpath = // * [@ type = 'submit' OR @ name = 'btnReset']
Xpath = // input [@ type = 'submit' and @ name = 'btnLogin']
Ispitni koraci:
- Idite na http://demo.guru99.com/v1/
- U ovom će odjeljku koristiti gornju demo stranicu za pretraživanje elemenata s različitim funkcijama XPath-a.
Element ćete pronaći pomoću osa AND i OR, nadređenih, osi koje započinju s i XPath
I ILI Primjer
uvoz org.openqa.selenium.By;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.WebElement;uvoz org.openqa.selenium.chrome.ChromeDriver;javni razred AND_OR {javna statička void glavna (String [] args) {Upravljački program za WebDriver;WebElement w, x;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");upravljački program = novi ChromeDriver ();// Pokretanje aplikacijedriver.get ("https://www.guru99.com/");// Pretraživanje elementa pomoću ILI u xpathuw = driver.findElement (By.xpath ("// * [@ type = 'submit' OR @ name = 'btnReset']"));// Ispis teksta elementaSystem.out.println (w.getText ());// Pretraživanje elementa pomoću AND u xpathux = driver.findElement (By.xpath ("// input [@ type = 'submit' and @ name = 'btnLogin']"));// Ispis teksta traženog elementaSystem.out.println (x.getText ());// Zatvorite preglednikdriver.quit ();}}
Što je roditelj u selenu?
Roditelj u seleniju je metoda koja se koristi za dohvaćanje nadređenog čvora trenutnog čvora odabranog na web stranici. Vrlo je korisno u situaciji kada odaberete element i trebate dobiti nadređeni element pomoću Xpatha. Ova se metoda koristi i za dobivanje roditelja roditelja.
Ovdje će naš XPath upit biti sličan
Xpath = // * [@ id = 'rt-feature'] // nadređeni :: div
XPath pomoću roditelja
uvoz org.openqa.selenium.By;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.WebElement;uvoz org.openqa.selenium.chrome.ChromeDriver;javni razred roditelj {javna statička void glavna (String [] args) {Upravljački program za WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");upravljački program = novi ChromeDriver ();// Pokretanje aplikacijedriver.get ("https://www.guru99.com/");// Pretraživanje elementa pomoću PARENTw = driver.findElement (By.xpath ("// * [@ id = 'rt-feature'] // nadređeni :: div"));// Ispis teksta traženog elementaSystem.out.println (w.getText ());// Zatvorite preglednikdriver.quit ();}}
Počinje sa
Pomoću funkcije Starts-with možete pronaći element čiji se atribut dinamički mijenja pri osvježavanju ili drugim operacijama poput klika, slanja itd.
Ovdje će naš XPath upit biti sličan
Xpath = // oznaka [započinje s (@ id, 'poruka')]
uvoz org.openqa.selenium.By;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.WebElement;uvoz org.openqa.selenium.chrome.ChromeDriver;javna klasa StartsWith {javna statička void glavna (String [] args) {Upravljački program za WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");upravljački program = novi ChromeDriver ();// Pokretanje aplikacijedriver.get ("https://www.guru99.com/");// Pretraživanje elementa pomoću start-withw = driver.findElement (By.xpath ("// oznaka [započinje s (@ id, 'poruka')]"));// Ispis teksta traženog elementaSystem.out.println (w.getText ());// Zatvorite preglednikdriver.quit ();}}
Xpath osi
Korištenjem XPath osi možete pronaći dinamične i vrlo složene elemente na web stranici. XPath osi sadrže nekoliko metoda za pronalaženje elementa. Ovdje ćemo razgovarati o nekoliko metoda.
sljedeće : Ova će funkcija vratiti neposredni element određene komponente.
Ovdje će naš XPath upit biti sličan
Xpath = // * [@ type = 'text'] // slijedi :: input
XPath koristeći sljedeće
uvoz org.openqa.selenium.By;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.WebElement;uvoz org.openqa.selenium.chrome.ChromeDriver;javni razred Slijedi {javna statička void glavna (String [] args) {Upravljački program za WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");upravljački program = novi ChromeDriver ();// Pokretanje aplikacijedriver.get ("https://www.guru99.com/");// Pretraživanje elementa pomoću sljedeće metodew = driver.findElement (By.xpath ("// * [@ type = 'text'] // slijedeći :: input"));// Ispis teksta traženog elementaSystem.out.println (w.getText ());// Zatvorite preglednikdriver.quit ();}}
Prethodno: Ova će funkcija vratiti prethodni element određenog elementa.
Ovdje će naš XPath upit biti sličan
Xpath = // * [@ type = 'submit'] // prethodi :: input
XPath pomoću Precedinga
uvoz org.openqa.selenium.By;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.WebElement;uvoz org.openqa.selenium.chrome.ChromeDriver;javni razred Preceding {javna statička void glavna (String [] args) {Upravljački program za WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");upravljački program = novi ChromeDriver ();// Pokretanje aplikacijedriver.get ("https://www.guru99.com/");// Pretraživanje elementa pomoću prethodne metodew = driver.findElement (By.xpath ("// * [@ type = 'submit'] // prethodni :: input"));// Ispis traženog elementaSystem.out.println (w.getText ());// Zatvorite preglednikdriver.quit ();}}
d) Descendant: Ova će funkcija vratiti potomstveni element određenog elementa.
Ovdje će naš XPath upit biti sličan
Xpath = // * [@ id = 'rt-feature'] // potomak :: a
XPath pomoću Descendenta
uvoz org.openqa.selenium.By;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.WebElement;uvoz org.openqa.selenium.chrome.ChromeDriver;javni razred Potomak {javna statička void glavna (String [] args) {Upravljački program za WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");upravljački program = novi ChromeDriver ();// Pokretanje aplikacijedriver.get ("https://www.guru99.com/");// Pretraživanje elementa metodom potomstvaw = driver.findElement (By.xpath ("// * [@ id = 'rt-feature'] // potomak :: a"));// Ispis traženog elementaSystem.out.println (w.getText ());// Zatvorite preglednikdriver.quit ();}}
Sažetak
- Postoje neke situacije kada se uobičajeni XPath ne može koristiti za pronalaženje elementa. U takvoj situaciji trebamo različite funkcije od upita xpath.
- Tu postoje neke važne XPath funkcije poput XPath, roditelj, preci, sljedbenici itd.
- Uz pomoć ovih funkcija možete stvoriti složene XPath izraze.