XPath bevat: tekst, volgende broer of zus en voorouder in Selenium
Wat bevat XPath?
XPath bevat is een functie binnen de Xpath-expressie die wordt gebruikt om te zoeken naar webelementen die een bepaalde tekst bevatten. We kunnen alle elementen extraheren die overeenkomen met de gegeven tekstwaarde met behulp van de XPath contain() functie op de hele webpagina. Bevat in XPath heeft de mogelijkheid om het element met gedeeltelijke tekst te vinden.
Voorbeeld – bevat tekst
Hier zoeken we een anker. bevat tekst als 'SAP M'.
"//h4/a[contains(text(),'SAP M')]"
OPMERKING: U kunt de volgende XPath-oefening op deze https://demo.guru99.com/test/selenium-xpath.html
Als een eenvoudige XPath kan geen ingewikkeld webelement vinden voor ons testscript, we moeten de functies uit de XPath 1.0-bibliotheek gebruiken. Met de combinatie van deze functies kunnen we specifiekere XPath creëren.
Broer of zus volgen in XPath
A Broertje binnen Selenium Webstuurprogramma is een functie die wordt gebruikt om een webelement op te halen dat een sibling is van het parent element. Als het parent element bekend is, kan het webelement eenvoudig worden gevonden of gelokaliseerd dat het sibling attribuut van de Xpath expressie in selenium webdriver kan gebruiken.
Broer of zus in XPath Voorbeeld:
Hier vinden we op basis van het broer-zuselement van 'a' 'h4'
"//div[@class='canvas- graph']//a[@href='/accounting.html'][i[@class='icon-usd']]/following-sibling::h4"
Voorvader: Om een element te vinden op basis van het ouderelement kunnen we het voorouderattribuut van XPath gebruiken.
Laten we deze 3 functies begrijpen aan de hand van een voorbeeld:
Teststappen:
Opmerking: Sinds de datum waarop de tutorial is gemaakt, is de startpagina van Guru99 bijgewerkt, dus gebruik in plaats daarvan de demosite om tests uit te voeren
- Ga naar https://demo.guru99.com/test/guru99home/
- Zoek in de sectie 'Een paar van onze populairste cursussen' naar alle webelementen die een broer of zus zijn van een webelement waarvan de tekst 'SELENIUM' is
- We zullen ontdekken dat elementen die XPath-tekst gebruiken de functie voorouder en broer of zus bevatten.
GEBRUIKEN Bevat tekst en 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; 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(); } }
De uitvoer zal er als volgt uitzien:
XPath-voorouder in Selenium
XPath-voorouder in Selenium is een functie die wordt gebruikt om de voorouder van een specifiek lid op de opgegeven laag te vinden. Het niveau van de voorouder dat moet worden geretourneerd of het niveau van de voorouder ten opzichte van het niveau van het lid kan expliciet worden opgegeven. Het retourneert het aantal hiërarchische stappen vanaf de voorouder, waarbij de opgegeven voorouder wordt gevonden die de gebruiker wil.
Stel nu dat we alle elementen in de sectie 'Populaire cursus' moeten doorzoeken met behulp van de voorouder van het anker waarvan de tekst 'SELENIUM' is.
Hier zal onze xpath-query er zo uitzien
"//div[.//a[text()='SELENIUM']]/ancestor::div[@class='rt-grid-2 rt-omega']/following-sibling::div"
Volledige code
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(); } }
De uitvoer ziet er zo uit:
Met EN en OF
Door AND en OR te gebruiken, kunt u 2 voorwaarden in onze XPath-expressie plaatsen.
- In het geval van AND moeten beide voorwaarden waar zijn, dan wordt alleen het element gevonden.
- In het geval van OR zou een van de twee voorwaarden waar moeten zijn, dan wordt alleen het element gevonden.
Hier zal onze XPath-query er zo uitzien
Xpath=//*[@type='submit' OR @name='btnReset']
Xpath=//input[@type='submit' and @name='btnLogin']
Teststappen:
- Ga naar https://demo.guru99.com/v1/
- In de sectie zal de bovenstaande demosite worden gebruikt om elementen met verschillende functies van XPath te zoeken.
U zult een element vinden met de assen AND en OR, parent, starts-with en XPath
EN OF Voorbeeld
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-ouder in Selenium
Ouder binnen Selenium is een methode die wordt gebruikt om het bovenliggende knooppunt op te halen van het huidige knooppunt dat op de webpagina is geselecteerd. Het is erg handig in de situatie waarin u een element selecteert en het bovenliggende element moet ophalen met behulp van Xpath. Deze methode wordt ook gebruikt om de ouder van de ouder te achterhalen.
Hier zal onze XPath-query er zo uitzien
Xpath=//*[@id='rt-feature']//parent::div
XPath met behulp van 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(); } }
Begint met
Met de functie Starts-with kunt u het element vinden waarvan het kenmerk dynamisch verandert bij vernieuwing of andere bewerkingen, zoals klikken, verzenden, enz.
Hier zal onze XPath-query er zo uitzien
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(); } }
Xpath-assen
Met XPath-assen kunt u de dynamische en zeer complexe elementen op een webpagina vinden. XPath-assen bevatten verschillende methoden om een element te vinden. Hier bespreken we een paar methoden.
volgend: Deze functie retourneert het directe element van het specifieke onderdeel.
Hier zal onze XPath-query er zo uitzien
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(); } }
Voorafgaand: Deze functie retourneert het voorgaande element van het specifieke element.
Hier zal onze XPath-query er zo uitzien
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) Aflopend: Deze functie retourneert het afstammende element van het specifieke element.
Hier zal onze XPath-query er zo uitzien
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(); } }
Samenvatting
- Er zijn situaties waarin gewone XPath niet kan worden gebruikt om een element te vinden. In een dergelijke situatie hebben we verschillende functies nodig van de xpath-query.
- Er zijn een aantal belangrijke XPath-functies, zoals XPath bevat, ouder, voorouders, volgende broer of zus, etc.
- Met behulp van deze functies kunt u complexe XPath-expressies maken.