Pokud jednoduchý XPath není schopen najít složitý webový prvek pro náš testovací skript, musíme použít funkce z knihovny XPath 1.0. Díky kombinaci těchto funkcí můžeme vytvořit konkrétnější XPath. Pojďme diskutovat o 3 takových funkcích -
- Obsahuje
- Sourozenec
- Předek
- A NEBO
- Rodič
- Začíná s
- Osy XPath
Pojďme si je podrobně prostudovat -
Co obsahuje () v selenu?
contains () in Selenium is a function within Xpath expression which is used to search for the web elements that contain a particular text. Můžeme extrahovat všechny prvky, které odpovídají dané textové hodnotě, pomocí funkce XPath contains () na celé webové stránce. Obsahuje v XPath má schopnost najít prvek s částečným textem.
Př. Zde hledáme kotvu. Obsahuje text jako „SAP M“.
"// h4 / a [obsahuje (text (), 'SAP M')]" "
POZNÁMKA: Následující cvičení XPath si můžete procvičit na tomto http://demo.guru99.com/test/selenium-xpath.html
Co je sourozenec v selenovém webdriveru?
Sourozence v Selenium Webdriver je funkce použita pro získání webové prvek, který je příbuzným nadřazený prvek. Pokud je nadřazený prvek znám, lze webový prvek snadno najít nebo vyhledat, který může použít atribut sourozence výrazu Xpath v selenovém webdriveru.
Sourozenec v XPath Příklad: Zde na základě sourozeneckého prvku 'a' nacházíme 'h4'
"// div [@ class = 'canvas-graph'] // a [@href = '/ accounting.html'] [i [@ class = 'icon-usd']] / following-sibling :: h4"
Předek : K vyhledání prvku na základě nadřazeného prvku můžeme použít atribut předka XPath.
Pojďme pochopit tyto 3 funkce pomocí příkladu -
Zkušební kroky
Poznámka: Od data vytvoření tutoriálu byla domovská stránka Guru99 aktualizována, takže místo toho použijte testovací web ke spuštění testů
- Přejít na http://demo.guru99.com/test/guru99home/
- V sekci „Několik našich nejoblíbenějších kurzů“ vyhledejte všechny webové prvky, které jsou sourozenci prvku WebElement, jehož text je „SELENIUM“
- Najdeme prvek pomocí funkce XPath text contains, předek a sourozenec.
POUŽÍVÁNÍ Obsahuje a XPath Sibling
import java.util.List;import java.util.concurrent.TimeUnit;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;veřejná třída SiblingAndParentInXpath {@Testpublic void testSiblingAndParentInXpath () {Ovladač WebDriver;Řetězec driverPath = "C: \\ geckodriver.exe";System.setProperty ("webdriver.gecko.driver", driverPath);driver = new FirefoxDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/guru99home/");// Hledejte prvek uvnitř 'Populárního kurzu', který je sourozencem ovládání 'SELENIUM', Nejprve zde najdeme h2, jehož text je '' Několik našich nejpopulárnějších kurzů ', pak se přesuneme k jeho nadřazenému prvku, kterým je' div ', uvnitř tohoto divu najdeme odkaz, jehož text je' SELENIUM ', nakonec najdeme všechny sourozenecké prvky tohoto odkazu (' SELENIUM ')SeznamdateBox = driver.findElements (By.xpath ("// h2 [obsahuje (text (), 'několik našich nejoblíbenějších kurzů')]) / parent :: div // div [// a [text () = 'SELENIUM']] / following-sibling :: div [@ class = 'rt-grid-2 rt-omega'] "));// Vytiskne všechny, které jsou sourozenci prvku pojmenovaného jako „SELENIUM“ v „Populárním kurzu“pro (WebElement webElement: dateBox) {System.out.println (webElement.getText ());}driver.close ();}}
Výstup bude vypadat takto:
Předchůdce selenového webdriveru
Ancestor in Selenium Webdriver je funkce sloužící k nalezení předka konkrétního člena v zadané vrstvě. Úroveň předka, která má být vrácena, nebo úroveň předka ve vztahu k úrovni člena lze explicitně zadat. Vrátí počet hierarchických kroků od předka a vyhledá zadaného předka, kterého chce uživatel.
Předpokládejme, že musíme v části „Populární kurz“ vyhledat všechny prvky pomocí předka kotvy, jejíž text je „SELENIUM“
Zde bude náš dotaz xpath vypadat
"//div[.//a[text()='SELENIUM']]/ancestor::div[@class='rt-grid-2 rt-omega '] / following-sibling :: div"
Kompletní kód
import java.util.List;import java.util.concurrent.TimeUnit;import org.openqa.selenium.By;importovat org.openqa.selenium.Keys;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;veřejná třída AncestorInXpath {@Testpublic void testAncestorInXpath () {Ovladač WebDriver = nový FirefoxDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/guru99home/");// Hledat všechny prvky v sekci „Populární kurz“// pomocí předka kotvy, jejíž text je „SELENIUM“SeznamdateBox = driver.findElements (By.xpath ("// div [.// a [text () = 'SELENIUM']] / ancestor :: div [@ class = 'rt-grid-2 rt- omega '] / following-sibling :: div "));// Vytiskne všechny, které jsou sourozenci prvku pojmenovaného jako „SELENIUM“ v „Populárním kurzu“pro (WebElement webElement: dateBox) {System.out.println (webElement.getText ());}driver.quit ();}}
Výstup bude vypadat jako-
Pomocí AND a OR
Použitím AND a OR můžete do našeho výrazu XPath vložit 2 podmínky.
- V případě AND by obě podmínky měly být pravdivé, pak pouze najde prvek.
- V případě OR by měla být splněna kterákoli ze 2 podmínek, pak pouze najde prvek.
Zde bude vypadat náš dotaz XPath
Xpath = // * [@ type = 'submit' OR @ name = 'btnReset']
Xpath = // input [@ type = 'submit' and @ name = 'btnLogin']
Zkušební kroky:
- Přejít na http://demo.guru99.com/v1/
- V této části použijeme výše uvedený ukázkový web k vyhledání prvku s různými funkcemi XPath.
Element najdete pomocí os A a NE, nadřazených, začínajících a os XPath
A NEBO Příklad
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;veřejná třída AND_OR {public static void main (String [] args) {Ovladač WebDriver;WebElement w, x;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = new ChromeDriver ();// Spusťte aplikacidriver.get ("https://www.guru99.com/");// Hledejte prvek pomocí NEBO v xpathw = driver.findElement (By.xpath ("// * [@ type = 'submit' OR @ name = 'btnReset']"));// Vytiskne text prvkuSystem.out.println (w.getText ());// Hledejte element pomocí AND v xpathx = driver.findElement (By.xpath ("// input [@ type = 'submit' and @ name = 'btnLogin']"));// Vytiskne text hledaného prvkuSystem.out.println (x.getText ());// Zavřete prohlížečdriver.quit ();}}
Co je rodič v selenu?
Parent in Selenium is a method used to retrieve the parent node of the current node selected in the web page. Je to velmi užitečné v situaci, kdy vyberete prvek a potřebujete získat nadřazený prvek pomocí Xpath. Tato metoda se také používá k získání rodiče rodiče.
Zde bude vypadat náš dotaz XPath
Xpath = // * [@ id = 'rt-feature'] // parent :: div
XPath pomocí Parent
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;public class Parent {public static void main (String [] args) {Ovladač WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = new ChromeDriver ();// Spusťte aplikacidriver.get ("https://www.guru99.com/");// Hledejte prvek pomocí RODIČEw = driver.findElement (By.xpath ("// * [@ id = 'rt-feature'] // parent :: div"));// Vytiskne text hledaného prvkuSystem.out.println (w.getText ());// Zavřete prohlížečdriver.quit ();}}
Začíná s
Pomocí funkce Začínáme s můžete najít prvek, jehož atribut se dynamicky mění při aktualizaci nebo jiných operacích, jako je kliknutí, odeslání atd.
Zde bude vypadat náš dotaz XPath
Xpath = // štítek [začíná-na (@ id, 'zpráva')]
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;veřejná třída StartsWith {public static void main (String [] args) {Ovladač WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = new ChromeDriver ();// Spusťte aplikacidriver.get ("https://www.guru99.com/");// Hledejte prvek pomocí začíná-sw = driver.findElement (By.xpath ("// label [začíná-na (@ id, 'zpráva')]"));// Vytiskne text hledaného prvkuSystem.out.println (w.getText ());// Zavřete prohlížečdriver.quit ();}}
Osy Xpath
Pomocí os XPath můžete najít dynamické a velmi složité prvky na webové stránce. Osy XPath obsahují několik metod k nalezení prvku. Zde probereme několik metod.
následující : Tato funkce vrátí okamžitý prvek konkrétní komponenty.
Zde bude vypadat náš dotaz XPath
Xpath = // * [@ type = 'text'] // následující :: vstup
XPath pomocí následujícího
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;veřejná třída Sledováno {public static void main (String [] args) {Ovladač WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = new ChromeDriver ();// Spusťte aplikacidriver.get ("https://www.guru99.com/");// Hledejte prvek pomocí metody Následujícíw = driver.findElement (By.xpath ("// * [@ type = 'text'] // následující :: vstup"));// Vytiskne text hledaného prvkuSystem.out.println (w.getText ());// Zavřete prohlížečdriver.quit ();}}
Předchozí: Tato funkce vrátí předchozí prvek konkrétního prvku.
Zde bude vypadat náš dotaz XPath
Xpath = // * [@ type = 'submit'] // předchozí :: vstup
XPath pomocí předchozího
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;veřejná třída předcházející {public static void main (String [] args) {Ovladač WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = new ChromeDriver ();// Spusťte aplikacidriver.get ("https://www.guru99.com/");// Hledání prvku pomocí předchozí metodyw = driver.findElement (By.xpath ("// * [@ type = 'submit'] // předchozí :: vstup"));// Vytiskne hledaný prvekSystem.out.println (w.getText ());// Zavřete prohlížečdriver.quit ();}}
d) Potomek : Tato funkce vrátí potomek prvku konkrétního prvku.
Zde bude vypadat náš dotaz XPath
Xpath = // * [@ id = 'rt-feature'] // potomek :: a
XPath pomocí Descendant
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;veřejná třída Descendant {public static void main (String [] args) {Ovladač WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = new ChromeDriver ();// Spusťte aplikacidriver.get ("https://www.guru99.com/");// Hledejte prvek pomocí metody potomkaw = driver.findElement (By.xpath ("// * [@ id = 'rt-feature'] // descendant :: a")));// Vytiskne hledaný prvekSystem.out.println (w.getText ());// Zavřete prohlížečdriver.quit ();}}
souhrn
- Existují situace, kdy nelze běžný XPath použít k vyhledání prvku. V takové situaci potřebujeme různé funkce z dotazu xpath.
- Tam jsou některé důležité funkce XPath jako XPath obsahuje, nadřazený, předkové, následný sourozenec atd.
- Pomocí těchto funkcí můžete vytvářet složité výrazy XPath.