XPath conține: text, următorul frate și strămoș în Selenium
Ce este XPath Contains?
XPath conține este o funcție din expresia Xpath care este utilizată pentru a căuta elementele web care conțin un anumit text. Putem extrage toate elementele care se potrivesc cu valoarea textului dată folosind funcția XPath contains() pe întreaga pagină web. Conține în XPath are capacitatea de a găsi elementul cu text parțial.
Exemplu – conține text
Aici căutăm o ancoră .contains text ca „SAP M'.
"//h4/a[contains(text(),'SAP M')]"
NOTĂ: Puteți exersa următorul exercițiu XPath în acest sens https://demo.guru99.com/test/selenium-xpath.html
Dacă un simplu XPath nu poate găsi un element web complicat pentru scriptul nostru de testare, trebuie să folosim funcțiile din biblioteca XPath 1.0. Prin combinarea acestor funcții, putem crea XPath mai specific.
Urmărirea fratelui în XPath
A Frate înăuntru Selenium Webdriver este o funcție folosită pentru a prelua un element web care este un frate cu elementul părinte. Dacă elementul părinte este cunoscut, atunci elementul web poate fi găsit sau localizat cu ușurință, care poate folosi atributul frate al expresiei Xpath în selenium webdriver.
Frate în XPath Exemplu:
Aici, pe baza elementului frate al lui „a”, găsim „h4”
"//div[@class='canvas- graph']//a[@href='/accounting.html'][i[@class='icon-usd']]/following-sibling::h4"
Strămoş: Pentru a găsi un element pe baza elementului părinte, putem folosi atributul strămoș al XPath.
Să înțelegem aceste 3 funcții folosind un exemplu -
Pașii de testare:
Notă: De la data creării tutorialului, pagina de pornire a lui Guru99 a fost actualizată, așa că utilizați site-ul demo pentru a rula teste.
- Mergi la pagina https://demo.guru99.com/test/guru99home/
- În secțiunea „Câteva dintre cele mai populare cursuri ale noastre”, căutați toate Elementele Web care sunt frate cu un Element Web al cărui text este „SELENIUM”
- Vom găsi element folosind textul XPath care conține funcția strămoș și frate.
UTILIZARE Conține text și XPath Frate
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; public class SiblingAndParentInXpath { @Test public void testSiblingAndParentInXpath(){ WebDriver driver; String driverPath = "C:\\geckodriver.exe"; System.setProperty("webdriver.gecko.driver", driverPath); driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.get("https://demo.guru99.com/test/guru99home/"); //Search element inside 'Popular course' which are sibling of control 'SELENIUM' ,Here first we will find a h2 whose text is ''A few of our most popular courses' ,then we move to its parent element which is a 'div' , inside this div we will find a link whose text is 'SELENIUM' then at last we will find all of the sibling elements of this link('SELENIUM') List <WebElement> dateBox = driver.findElements(By.xpath("//h2[contains(text(),'A few of our most popular courses')]/parent::div//div[//a[text()='SELENIUM']]/following-sibling::div[@class='rt-grid-2 rt-omega']")); //Print all the which are sibling of the the element named as 'SELENIUM' in 'Popular course' for (WebElement webElement : dateBox) { System.out.println(webElement.getText()); } driver.close(); } }
Ieșirea va fi ca:
XPath Ancestor în Selenium
XPath Ancestor în Selenium este o funcție folosită pentru a găsi strămoșul unui anumit membru la nivelul specificat. Nivelul strămoșului care trebuie returnat sau nivelul strămoșului relativ la nivelul membrului poate fi specificat în mod explicit. Returnează numărul de pași ierarhici de la strămoș, localizând strămoșul specificat pe care îl dorește utilizatorul.
Acum să presupunem că trebuie să căutăm toate elementele din secțiunea „Curs popular” cu ajutorul strămoșului ancorei al cărei text este „SELENIUM”
Aici interogarea noastră xpath va fi ca
"//div[.//a[text()='SELENIUM']]/ancestor::div[@class='rt-grid-2 rt-omega']/following-sibling::div"
Cod complet
import java.util.List; import java.util.concurrent.TimeUnit; import org.openqa.selenium.By; import 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; public class AncestorInXpath{ @Test public void testAncestorInXpath(){ WebDriver driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.get("https://demo.guru99.com/test/guru99home/"); //Search All elements in 'Popular course' section //with the help of ancestor of the anchor whose text is 'SELENIUM' List <WebElement> dateBox = driver.findElements(By.xpath("//div[.//a[text()='SELENIUM']]/ancestor::div[@class='rt-grid-2 rt-omega']/following-sibling::div")); //Print all the which are sibling of the element named as 'SELENIUM' in 'Popular course' for (WebElement webElement : dateBox) { System.out.println(webElement.getText()); } driver.quit(); } }
Ieșirea va arăta ca...
Folosind AND și SAU
Folosind AND și SAU puteți pune 2 condiții în expresia noastră XPath.
- În cazul AND, ambele 2 condiții ar trebui să fie adevărate, atunci numai acesta găsește elementul.
- În cazul OR, oricare dintre cele 2 condiții ar trebui să fie adevărată, atunci numai acesta găsește elementul.
Aici interogarea noastră XPath va fi ca
Xpath=//*[@type='submit' OR @name='btnReset']
Xpath=//input[@type='submit' and @name='btnLogin']
Pașii de testare:
- Mergi la pagina https://demo.guru99.com/v1/
- În secțiune, va folosi site-ul demo de mai sus pentru a căuta elemente cu diferite funcții ale XPath.
Veți găsi un element folosind axele AND și SAU, părinte, începe cu și XPath
ȘI SAU Exemplu
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; public class AND_OR { public static void main(String[] args) { WebDriver driver; WebElement w,x; System.setProperty("webdriver.chrome.driver","E://Selenium//Selenium_Jars//chromedriver.exe"); driver= new ChromeDriver(); // Launch the application driver.get("https://www.guru99.com/"); //Search element using OR in the xpath w=driver.findElement(By.xpath("//*[@type='submit' OR @name='btnReset']")); //Print the text of the element System.out.println(w.getText()); //Search element using AND in the xpath x=driver.findElement(By.xpath("//input[@type='submit' and @name='btnLogin']")); //Print the text of the searched element System.out.println(x.getText()); //Close the browser driver.quit(); } }
XPath Parent în Selenium
Părinte în Selenium este o metodă folosită pentru a prelua nodul părinte al nodului curent selectat în pagina web. Este foarte util în situația în care selectați un element și trebuie să obțineți elementul părinte folosind Xpath. Această metodă este folosită și pentru a obține părintele părintelui.
Aici interogarea noastră XPath va fi ca
Xpath=//*[@id='rt-feature']//parent::div
XPath folosind 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) { WebDriver driver; WebElement w; System.setProperty("webdriver.chrome.driver","E://Selenium//Selenium_Jars//chromedriver.exe"); driver= new ChromeDriver(); // Launch the application driver.get("https://www.guru99.com/"); //Search the element by using PARENT w=driver.findElement(By.xpath("//*[@id='rt-feature']//parent::div")); //Print the text of the searched element System.out.println(w.getText()); //Close the browser driver.quit(); } }
Incepe cu
Folosind funcția Începe-cu, puteți găsi elementul al cărui atribut se schimbă dinamic la reîmprospătare sau alte operațiuni precum clic, trimite etc.
Aici interogarea noastră XPath va fi ca
Xpath=//label[starts-with(@id,'message')]
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; public class StartsWith { public static void main(String[] args) { WebDriver driver; WebElement w; System.setProperty("webdriver.chrome.driver","E://Selenium//Selenium_Jars//chromedriver.exe"); driver= new ChromeDriver(); // Launch the application driver.get("https://www.guru99.com/"); //Search the element by using starts-with w=driver.findElement(By.xpath("//label[starts-with(@id,'message')]")); //Print the text of the searched element System.out.println(w.getText()); //Close the browser driver.quit(); } }
Axele Xpath
Folosind axele XPath, puteți găsi elementele dinamice și foarte complexe pe o pagină web. Axele XPath conțin mai multe metode de a găsi un element. Aici, vom discuta câteva metode.
următor: Această funcție va returna elementul imediat al componentei particulare.
Aici interogarea noastră XPath va fi ca
Xpath=//*[@type='text']//following::input
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; public class Following { public static void main(String[] args) { WebDriver driver; WebElement w; System.setProperty("webdriver.chrome.driver","E://Selenium//Selenium_Jars//chromedriver.exe"); driver= new ChromeDriver(); // Launch the application driver.get("https://www.guru99.com/"); //Search the element by using Following method w=driver.findElement(By.xpath("//*[@type='text']//following::input")); //Print the text of the searched element System.out.println(w.getText()); //Close the browser driver.quit(); } }
Precedent: Această funcție va returna elementul precedent al elementului particular.
Aici interogarea noastră XPath va fi ca
Xpath= //*[@type='submit']//preceding::input
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; public class Preceding { public static void main(String[] args) { WebDriver driver; WebElement w; System.setProperty("webdriver.chrome.driver","E://Selenium//Selenium_Jars//chromedriver.exe"); driver= new ChromeDriver(); // Launch the application driver.get("https://www.guru99.com/"); //Search the element by using preceding method w=driver.findElement(By.xpath("//*[@type='submit']//preceding::input")); //Print the searched element System.out.println(w.getText()); //Close the browser driver.quit(); } }
d) Descendentă: Această funcție va returna elementul descendent al unui anumit element.
Aici interogarea noastră XPath va fi ca
Xpath= //*[@id='rt-feature']//descendant::a
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; public class Descendant { public static void main(String[] args) { WebDriver driver; WebElement w; System.setProperty("webdriver.chrome.driver","E://Selenium//Selenium_Jars//chromedriver.exe"); driver= new ChromeDriver(); // Launch the application driver.get("https://www.guru99.com/"); //Search the element by using descendant method w=driver.findElement(By.xpath("//*[@id='rt-feature']//descendant::a")); //Print the searched element System.out.println(w.getText()); //Close the browser driver.quit(); } }
Rezumat
- Există unele situații în care XPath obișnuit nu poate fi folosit pentru a găsi un element. Într-o astfel de situație, avem nevoie de funcții diferite de interogarea xpath.
- Există câteva funcții importante XPath, cum ar fi XPath, care conține, părinte, strămoși, următor-frate etc.
- Cu ajutorul acestor funcții, puteți crea expresii XPath complexe. Dacă trebuie să înțelegeți cum să utilizați conținut în XPath în mod specific, funcția conține în seleniu oferă o modalitate ușoară de a căuta elemente web pe baza potrivirii parțiale a textului.