Kui lihtne XPath ei suuda meie testskripti jaoks keerukat veebielementi leida, peame kasutama XPath 1.0 teegi funktsioone. Nende funktsioonide kombinatsiooniga saame luua täpsema XPathi. Arutame 3 sellist funktsiooni -
- Sisaldab
- Õde-vend
- Esivanem
- Ja VÕI
- Vanem
- Alustab
- XPathi teljed
Uurime neid üksikasjalikult -
Mis sisaldab () seleenis?
sisaldab () seleenis on Xpathi avaldise funktsioon, mida kasutatakse konkreetset teksti sisaldavate veebielementide otsimiseks. Kõigi antud tekstiväärtusele vastavate elementide abil saame kogu veebisaidil kasutada funktsiooni XPath sees (). Sisaldab XPathis on võime leida osalise tekstiga elemendi.
Nt Siin otsime ankrut. Sisaldab teksti kui "SAP M".
"// h4 / a [sisaldab (text (), 'SAP M')]"
MÄRKUS. Sellel saidil http://demo.guru99.com/test/selenium-xpath.html saate harjutada järgmist XPathi harjutust
Mis on vend Seleeni veebidraiveris?
Kaas seleeni Webdriver on funktsioon, mida kasutatakse tõmmata web element, mis on vend vanemale element. Kui vanemelement on teada, saab veebielemendi hõlpsasti leida või leida, mis võib kasutada seleeni veebidraiveris Xpath avaldise õde-õde atribuuti.
Õde XPathis Näide: Siit leiame 'a' õe-venna elemendi põhjal 'h4'
"// div [@ class = 'lõuendgraafik'] // a [@href = '/ raamatupidamine.html'] [i [@ class = 'icon-usd']] / järgmine-vend :: h4"
Esivanem : Vanemelemendi põhjal elemendi leidmiseks võime kasutada XPathi esivanemat.
Mõistame näite abil neid kolme funktsiooni -
Testi sammud
Märkus: Alates õpetuse loomise kuupäevast on Guru99 koduleht uuendatud, seega kasutage testide käivitamiseks selle asemel demosait
- Minge aadressile http://demo.guru99.com/test/guru99home/
- Jaotises "Mõned meie kõige populaarsemad kursused" otsige kõiki veebielemente, mis on WebElementi vennad, mille tekst on "SELENIUM"
- Leiame elemendi, kasutades XPathi teksti sisaldab, esivanemate ja vendade-vendade funktsiooni.
Sisaldab ja XPathi venda
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;avalik klass SiblingAndParentInXpath {@Testpublic void testSiblingAndParentInXpath () {WebDriveri draiver;String driverPath = "C: \\ geckodriver.exe";System.setProperty ("webdriver.gecko.driver", driverPath);draiver = uus FirefoxDriver ();driver.manage (). timeout (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/guru99home/");// Otsinguelement 'Populaarne rada' sees, mis on kontrolli 'SELENIUM' vend. Siit leiame kõigepealt h2, mille tekst on '' Mõned meie kõige populaarsemad kursused ', seejärel liigume selle vanemelemendi juurde, mis on' div ', selle div seest leiame lingi, mille tekst on' SELENIUM ', siis lõpuks leiame selle lingi kõik õe-venna elemendid (' SELENIUM ')LoenddateBox = driver.findElements (By.xpath ("// h2 [sisaldab (text (), 'Mõned meie kõige populaarsemad kursused')] / parent :: div // div [// a [text () = 'SELENIUM']] / järgmine õde-vend :: div [@ class = 'rt-grid-2 rt-omega'] "));// Prindi kõik need elemendid, mis on elemendis „Populaarne kursus” nimega „SELENIUM”, vennadfor (WebElement webElement: dateBox) {System.out.println (webElement.getText ());}juht.sule ();}}
Väljund on järgmine:
Esivanem seleeni veebidraiveris
Esivanem seleenis Webdriveris on funktsioon, mida kasutatakse kindla liikme esivanemate leidmiseks määratud kihilt. Tagastatava esivanema taseme või esivanema taseme liikme taseme suhtes saab selgelt määratleda. See tagastab esivanema hierarhiliste sammude arvu, leides kasutaja soovitud esivanema.
Oletame nüüd, et peame kõiki elemente jaotises „Populaarne rada” otsima ankru esivanema abil, mille tekst on „SELENIUM”
Siin on meie xpathi päring selline
"//div[.//a[text()='SELENIUM']]/ancestor::div[@class='rt-grid-2 rt-omega '] / jälgiv-vend :: div
Täielik kood
import java.util.List;import java.util.concurrent.TimeUnit;import org.openqa.selenium.By;import org.openqa.selenium.Kesys;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;avalik klass AncestorInXpath {@Testpublic void testAncestorInXpath () {WebDriveri draiver = uus FirefoxDriver ();driver.manage (). timeout (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/guru99home/");// Otsi kõiki elemente jaotisest „Populaarne kursus”// ankru esivanem, kelle tekst on 'SELENIUM'LoendissedateBox = driver.findElements (By.xpath ("// div [.// a [text () = 'SELENIUM']] / esivanem :: div [@ class = 'rt-grid-2 rt- omega '] / järgnev õde-vend :: div "));// Trükkige jaotises „Populaarne kursus” kõik elemendi nimega SELENIUM õed ja vennadfor (WebElement webElement: dateBox) {System.out.println (webElement.getText ());}juht.ulge ();}}
Väljund näeb välja nagu
AND ja OR kasutamine
AND ja OR abil saate meie XPathi avaldisesse lisada 2 tingimust.
- AND-i korral peaksid mõlemad kaks tingimust olema tõesed, siis leiab element ainult selle.
- VÕI korral peaks üks kahest tingimusest olema tõene, siis leiab elemendi ainult see.
Siin on meie XPathi päring selline
Xpath = // * [@ type = 'esita' VÕI @ nimi = 'btnReset']
Xpath = // sisend [@ type = 'esita' ja @ nimi = 'btnLogin']
Testi sammud:
- Minge aadressile http://demo.guru99.com/v1/
- Selles jaotises kasutab ülaltoodud demosaiti XPathi erinevate funktsioonidega elemendi otsimiseks.
Leiate elemendi, kasutades AND ja OR, vanemat, alustamist alustamist ja XPathi telge
JA VÕI näide
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;avalik klass AND_OR {public staatiline void main (String [] args) {WebDriveri draiver;WebElement w, x;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");draiver = uus ChromeDriver ();// Käivitage rakendusdriver.get ("https://www.guru99.com/");// Otsinguelement kasutab xpath-is OR-iw = driver.findElement (By.xpath ("// * [@ type = 'esita' VÕI @ nimi = 'btnReset']"));// Prindi elemendi tekstSystem.out.println (w.getText ());// Otsinguelement, kasutades xpathis AND-dx = driver.findElement (By.xpath ("// sisend [@ type = 'esita' ja @ nimi = 'btnLogin']"));// Prinditakse otsitava elemendi tekstSystem.out.println (x.getText ());// Sulgege brauserjuht.ulge ();}}
Mis on vanem seleenis?
Paren in Selenium on meetod, mida kasutatakse veebisaidil valitud praeguse sõlme vanemasõlme hankimiseks. See on väga kasulik olukorras, kui valite elemendi ja peate vanemelemendi hankima Xpathi abil. Seda meetodit kasutatakse ka vanema vanema saamiseks.
Siin on meie XPathi päring selline
Xpath = // * [@ id = 'rt-feature'] // vanem :: div
XPath, kasutades vanemat
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;avalik klass Vanem {public staatiline void main (String [] args) {WebDriveri draiver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");draiver = uus ChromeDriver ();// Käivitage rakendusdriver.get ("https://www.guru99.com/");// Otsige elementi, kasutades PARENTw = driver.findElement (By.xpath ("// * [@ id = 'rt-feature'] // parent :: div"));// Prinditakse otsitava elemendi tekstSystem.out.println (w.getText ());// Sulgege brauserjuht.ulge ();}}
Alustab-sellega
Funktsiooni Alustades-funktsiooniga saate leida elemendi, mille atribuut muutub värskendamisel või muudel toimingutel, nagu klõpsamine, esitamine jne, dünaamiliselt.
Siin on meie XPathi päring selline
Xpath = // silt [algab-with (@ id, 'sõnum')]
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;avalik klass algab {public staatiline void main (String [] args) {WebDriveri draiver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");draiver = uus ChromeDriver ();// Käivitage rakendusdriver.get ("https://www.guru99.com/");// Otsige elementi kasutades algustw = driver.findElement (By.xpath ("// silt [algab-with (@ id, 'sõnum')]"));// Prinditakse otsitava elemendi tekstSystem.out.println (w.getText ());// Sulgege brauserjuht.ulge ();}}
Xpathi teljed
XPathi telgede abil leiate veebilehelt dünaamilised ja väga keerukad elemendid. XPathi teljed sisaldavad elemendi leidmiseks mitmeid meetodeid. Siin arutleme mõne meetodi üle.
järgmine : See funktsioon tagastab konkreetse komponendi vahetu elemendi.
Siin on meie XPathi päring selline
Xpath = // * [@ type = 'text'] // järgmine :: sisend
XPath kasutab järgmist
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;avalik klass jälgib {public staatiline void main (String [] args) {WebDriveri draiver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");draiver = uus ChromeDriver ();// Käivitage rakendusdriver.get ("https://www.guru99.com/");// Otsige elementi, kasutades meetodit Järgminew = driver.findElement (By.xpath ("// * [@ type = 'text'] // järgmine :: sisend"));// Prinditakse otsitava elemendi tekstSystem.out.println (w.getText ());// Sulgege brauserjuht.ulge ();}}
Eelnev: see funktsioon tagastab konkreetse elemendi eelneva elemendi.
Siin on meie XPathi päring selline
Xpath = // * [@ type = 'esita'] // enne :: sisendit
XPath, kasutades funktsiooni Eelnev
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;avalik klass eelnenud {public staatiline void main (String [] args) {WebDriveri draiver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");draiver = uus ChromeDriver ();// Käivitage rakendusdriver.get ("https://www.guru99.com/");// Otsige elementi eelmise meetodi abilw = driver.findElement (By.xpath ("// * [@ type = 'submit'] // eelnev :: sisestus"));// Prindige otsitav elementSystem.out.println (w.getText ());// Sulgege brauserjuht.ulge ();}}
d) Järeltulija: see funktsioon tagastab konkreetse elemendi järeltulija elemendi.
Siin on meie XPathi päring selline
Xpath = // * [@ id = 'rt-feature'] // järeltulija :: a
XPath kasutab järeltulijat
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;avaliku klassi järeltulija {public staatiline void main (String [] args) {WebDriveri draiver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");draiver = uus ChromeDriver ();// Käivitage rakendusdriver.get ("https://www.guru99.com/");// Otsige elementi järeltulijate meetodi abilw = driver.findElement (By.xpath ("// * [@ id = 'rt-feature'] // järeltulija :: a"));// Prindige otsitav elementSystem.out.println (w.getText ());// Sulgege brauserjuht.ulge ();}}
Kokkuvõte
- On mõningaid olukordi, kus tavalist XPathi ei saa elemendi leidmiseks kasutada. Sellises olukorras vajame xpath päringust erinevaid funktsioone.
- Seal on mõned olulised XPathi funktsioonid, nagu XPath sisaldab, vanemad, esivanemad, õde-vend jne.
- Nende funktsioonide abil saate luua keerukaid XPathi väljendeid.