Jos yksinkertainen XPath ei löydä monimutkaista verkkoelementtiä testiskriptiimme, meidän on käytettävä XPath 1.0 -kirjaston toimintoja. Näiden toimintojen yhdistelmällä voimme luoda tarkemman XPath-version. Keskustellaan 3 tällaisesta toiminnosta -
- Sisältää
- Sisar
- Esivanhempi
- Ja tai
- Vanhempi
- Alkaa
- XPath-akselit
Tutkitaan niitä yksityiskohtaisesti -
Mitä seleeni sisältää ()?
sisältää () seleniumissa on Xpath-lausekkeen funktio, jota käytetään etsimään verkkoelementtejä, jotka sisältävät tietyn tekstin. Voimme purkaa kaikki annettua tekstiarvoa vastaavat elementit XPath contains () -toiminnolla koko verkkosivulta. Sisältää XPathissa on kyky löytää elementti osittaisella tekstillä.
Esim. Täällä haemme ankkuria. Sisältää tekstiä nimellä 'SAP M'.
"// h4 / a [sisältää (teksti (), 'SAP M')]"
HUOMAUTUS: Voit harjoitella seuraavaa XPath-harjoitusta tällä http://demo.guru99.com/test/selenium-xpath.html
Mitä sisar on selenium-verkko-ohjaimessa?
Sisarukset in Seleeni Webdriver on toiminto, jota käytetään noutamaan web-elementti, joka on sisarus emoelementin. Jos pääelementti tunnetaan, verkkoelementti voidaan helposti löytää tai löytää, joka voi käyttää Xpath-lausekkeen sisar-attribuuttia seleeni-verkko-ohjaimessa.
Sisar XPathissa Esimerkki: Tässä löydetään 'a': n sisaruselementin perusteella 'h4'
"// div [@ class = 'canvas- graph'] // a [@href = '/ kirjanpito.html'] [i [@ class = 'icon-usd']] / seuraava-sisarus :: h4"
Esivanhempi : Jos haluat löytää elementin vanhemman elementin perusteella, voimme käyttää XPath: n esi-attribuuttia.
Annetaan ymmärtää nämä 3 toimintoa esimerkin avulla -
Testivaiheet
Huomaa: Opetusohjelman luomispäivästä lähtien Guru99: n kotisivu on päivitetty, joten käytä demosivustoa testien suorittamiseen
- Siirry osoitteeseen http://demo.guru99.com/test/guru99home/
- Etsi osasta 'Muutama suosituimmista kursseistamme' kaikki Web-elementit, jotka ovat sisaruksia WebElementille, jonka teksti on 'SELENIUM'
- Löydämme elementin, joka käyttää XPath-tekstiä sisältää, esi-isä ja sisarus-toimintoa.
Sisältää ja XPath-sisarus
tuo java.util.List;tuo java.util.concurrent.TimeUnit;tuo org.openqa.selenium.By;tuo org.openqa.selenium.WebDriver;tuonti org.openqa.selenium.WebElement;tuo org.openqa.selenium.firefox.FirefoxDriver;tuo org.testng.annotations.Test;julkinen luokka SiblingAndParentInXpath {@Testatapublic void testSiblingAndParentInXpath () {WebDriver-ohjain;Merkkijono driverPath = "C: \\ geckodriver.exe";System.setProperty ("webdriver.gecko.driver", driverPath);ohjain = uusi FirefoxDriver ();driver.manage (). timeout (). implisiittisesti Odota (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/guru99home/");// Hakuelementti 'Suosittu kurssi' -sivulta, joka on 'SELENIUM' -ohjauksen sisar, Täältä löydät ensin h2: n, jonka teksti on '' Muutama suosituimmista kursseistamme '', sitten siirrymme sen pääelementtiin, joka on '' div ', tämän div: n sisällä on linkki, jonka teksti on' SELENIUM ', sitten viimeinkin löydämme kaikki tämän linkin sisarelementit (' SELENIUM ')LuettelodateBox = driver.findElements (By.xpath ("// h2 [sisältää (text (), 'Muutama suosituimmista kursseistamme')]] / parent :: div // div [// a [text () = 'SELENIUM']] / seuraaja-sisarus :: div [@ class = 'rt-grid-2 rt-omega'] "));// Tulosta kaikki SELENIUM-nimisen elementin sisarukset Suosittu kurssi -kohdassakohteelle (WebElement webElement: dateBox) {System.out.println (webElement.getText ());}kuljettaja.sulje ();}}
Tulos on kuin:
Esivanhempi Selenium-verkko-ohjaimessa
Selenium Webdriverin esi-isä on toiminto, jota käytetään etsimään tietyn jäsenen esi-isä määritetystä kerroksesta. Palautettavan esi-isän taso tai esi-isän taso suhteessa jäsenen tasoon voidaan erikseen määritellä. Se palauttaa esi-isän hierarkkisten vaiheiden määrän etsimällä määritetyn esi-isän, jonka käyttäjä haluaa.
Oletetaan, että meidän on etsittävä kaikkia osioita "Suosittu kurssi" -osasta ankkurin esi-isän avulla, jonka teksti on "SELENIUM"
Tässä xpath-kyselymme on kuin
"//div[.//a[text()='SELENIUM']]/ancestor::div[@class='rt-grid-2 rt-omega '] / seuraaja-sisarus :: div"
Täydellinen koodi
tuo java.util.List;tuo java.util.concurrent.TimeUnit;tuo org.openqa.selenium.By;tuonti org.openqa.selenium.Keys;tuo org.openqa.selenium.WebDriver;tuonti org.openqa.selenium.WebElement;tuo org.openqa.selenium.firefox.FirefoxDriver;tuo org.testng.annotations.Test;julkinen luokka AncestorInXpath {@Testatapublic void testAncestorInXpath () {WebDriver-ohjain = uusi FirefoxDriver ();driver.manage (). timeout (). implisiittisesti Odota (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/guru99home/");// Hae kaikista osista Suosittu kurssi// ankkurin esi-isän avulla, jonka teksti on 'SELENIUM'LuettelodateBox = driver.findElements (By.xpath ("// div [.// a [text () = 'SELENIUM']] / esi-isä :: div [@ class = 'rt-grid-2 rt- omega '] / seuraava sisarus :: div "));// Tulosta kaikki SELENIUM-nimisen elementin sisarukset Suosittu kurssi -kohdassakohteelle (WebElement webElement: dateBox) {System.out.println (webElement.getText ());}kuljettaja. lopeta ();}}
Tuotos näyttää-
AND- ja OR-näppäinten käyttö
AND- ja OR-näppäimillä voit laittaa kaksi ehtoa XPath-lausekkeeseemme.
- AND: n tapauksessa molempien kahden ehdon pitäisi olla totta, vain se löytää elementin.
- Jos kyseessä on OR, jommankumman ehdoista pitäisi olla totta, vain se löytää elementin.
Tässä XPath-kyselymme tulee olemaan
Xpath = // * [@ type = 'lähetä' TAI @ nimi = 'btnReset']
Xpath = // input [@ type = 'lähetä' ja @ name = 'btnLogin']
Testivaiheet:
- Siirry osoitteeseen http://demo.guru99.com/v1/
- Tässä osiossa käytetään yllä olevaa demosivustoa hakemaan elementtiä XPathin eri toiminnoilla.
Löydät elementin käyttämällä AND- ja OR-, parent-, start-with- ja XPath-akseleita
JA TAI Esimerkki
tuo org.openqa.selenium.By;tuo org.openqa.selenium.WebDriver;tuonti org.openqa.selenium.WebElement;tuo org.openqa.selenium.chrome.ChromeDriver;julkinen luokka AND_OR {public staattinen void main (String [] argumentoi) {WebDriver-ohjain;WebElement w, x;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");ohjain = uusi ChromeDriver ();// Käynnistä sovellusdriver.get ("https://www.guru99.com/");// Hakuelementti käyttämällä OR OR xpathissaw = driver.findElement (By.xpath ("// * [@ type = 'lähetä' TAI @ nimi = 'btnReset']"));// Tulosta elementin tekstiSystem.out.println (w.getText ());// Hakuelementti käyttämällä x-polussa AND: täx = driver.findElement (By.xpath ("// syöte [@ type = 'lähetä' ja @ nimi = 'btnLogin']"));// Tulosta haetun elementin tekstiSystem.out.println (x.getText ());// Sulje selainkuljettaja. lopeta ();}}
Mikä on vanhempi seleenissä?
Parent in Selenium on menetelmä, jolla haetaan verkkosivulla valitun nykyisen solmun yläsolmu. Se on erittäin hyödyllinen tilanteessa, jossa valitset elementin ja sinun on hankittava pääelementti Xpath-sovelluksella. Tätä menetelmää käytetään myös vanhempien vanhempien saamiseen.
Tässä XPath-kyselymme tulee olemaan
Xpath = // * [@ id = 'rt-feature'] // vanhempi :: div
XPath käyttää vanhempaa
tuo org.openqa.selenium.By;tuo org.openqa.selenium.WebDriver;tuonti org.openqa.selenium.WebElement;tuo org.openqa.selenium.chrome.ChromeDriver;julkinen luokka Vanhempipublic staattinen void main (String [] argumentoi) {WebDriver-ohjain;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");ohjain = uusi ChromeDriver ();// Käynnistä sovellusdriver.get ("https://www.guru99.com/");// Hae elementtiä PARENTillaw = driver.findElement (By.xpath ("// * [@ id = 'rt-feature'] // parent :: div"));// Tulosta haetun elementin tekstiSystem.out.println (w.getText ());// Sulje selainkuljettaja. lopeta ();}}
Alkaa -
Käynnistys-toiminnolla voit löytää elementin, jonka attribuutti muuttuu dynaamisesti päivityksessä tai muissa toiminnoissa, kuten napsautus, lähetys jne.
Tässä XPath-kyselymme tulee olemaan
Xpath = // tunniste [alkaa-kanssa (@ id, 'viesti')]
tuo org.openqa.selenium.By;tuo org.openqa.selenium.WebDriver;tuonti org.openqa.selenium.WebElement;tuo org.openqa.selenium.chrome.ChromeDriver;julkinen luokka alkaa {public staattinen void main (String [] argumentoi) {WebDriver-ohjain;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");ohjain = uusi ChromeDriver ();// Käynnistä sovellusdriver.get ("https://www.guru99.com/");// Hae elementtiä käyttämällä start-withw = driver.findElement (By.xpath ("// tunniste [alkaa-kanssa (@ id, 'viesti')]"));// Tulosta haetun elementin tekstiSystem.out.println (w.getText ());// Sulje selainkuljettaja. lopeta ();}}
Xpath-akselit
XPath-akseleita käyttämällä löydät verkkosivulta dynaamiset ja erittäin monimutkaiset elementit. XPath-akselit sisältävät useita tapoja löytää elementti. Tässä keskustellaan muutamista menetelmistä.
seuraava : Tämä toiminto palauttaa komponentin välittömän elementin.
Tässä XPath-kyselymme tulee olemaan
Xpath = // * [@ type = 'text'] // seuraava :: input
XPath käyttää seuraavaa
tuo org.openqa.selenium.By;tuo org.openqa.selenium.WebDriver;tuonti org.openqa.selenium.WebElement;tuo org.openqa.selenium.chrome.ChromeDriver;julkinen luokka seuraa {public staattinen void main (String [] argumentoi) {WebDriver-ohjain;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");ohjain = uusi ChromeDriver ();// Käynnistä sovellusdriver.get ("https://www.guru99.com/");// Hae elementtiä seuraamalla -menetelmääw = driver.findElement (By.xpath ("// * [@ type = 'text'] // seuraava :: input"));// Tulosta haetun elementin tekstiSystem.out.println (w.getText ());// Sulje selainkuljettaja. lopeta ();}}
Edeltävä: Tämä toiminto palauttaa tietyn elementin edellisen elementin.
Tässä XPath-kyselymme tulee olemaan
Xpath = // * [@ type = 'lähetä'] // edeltävä :: input
XPath käyttäen edeltävää
tuo org.openqa.selenium.By;tuo org.openqa.selenium.WebDriver;tuonti org.openqa.selenium.WebElement;tuo org.openqa.selenium.chrome.ChromeDriver;julkinen luokka edeltävä {public staattinen void main (String [] argumentoi) {WebDriver-ohjain;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");ohjain = uusi ChromeDriver ();// Käynnistä sovellusdriver.get ("https://www.guru99.com/");// Hae elementistä edellisen menetelmän avullaw = driver.findElement (By.xpath ("// * [@ type = 'lähetä'] // edellinen :: input"));// Tulosta haettu elementtiSystem.out.println (w.getText ());// Sulje selainkuljettaja. lopeta ();}}
d) Jälkeläinen: Tämä funktio palauttaa tietyn elementin jälkeläisen.
Tässä XPath-kyselymme tulee olemaan
Xpath = // * [@ id = 'rt-feature'] // jälkeläinen :: a
XPath käyttäen jälkeläistä
tuo org.openqa.selenium.By;tuo org.openqa.selenium.WebDriver;tuonti org.openqa.selenium.WebElement;tuo org.openqa.selenium.chrome.ChromeDriver;julkisen luokan jälkeläinen {public staattinen void main (String [] argumentoi) {WebDriver-ohjain;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");ohjain = uusi ChromeDriver ();// Käynnistä sovellusdriver.get ("https://www.guru99.com/");// Hae elementtiä descendant-menetelmälläw = driver.findElement (By.xpath ("// * [@ id = 'rt-feature'] // jälkeläinen :: a"));// Tulosta haettu elementtiSystem.out.println (w.getText ());// Sulje selainkuljettaja. lopeta ();}}
Yhteenveto
- Joissakin tilanteissa tavallista XPath-ohjelmaa ei voida käyttää elementin löytämiseen. Tällaisessa tilanteessa tarvitsemme erilaisia toimintoja kuin xpath-kysely.
- Siellä on joitain tärkeitä XPath-toimintoja, kuten XPath sisältää, vanhemmat, esi-isät, sisarukset jne.
- Näiden toimintojen avulla voit luoda monimutkaisia XPath-lausekkeita.