Basit bir XPath, test komut dosyamız için karmaşık bir web öğesi bulamazsa, XPath 1.0 kitaplığındaki işlevleri kullanmamız gerekir. Bu işlevlerin birleşimiyle daha özel XPath oluşturabiliriz. Bu tür 3 işlevi tartışalım -
- İçerir
- Kardeş
- Ata
- Ve VEYA
- Ebeveyn
- İle başlar
- XPath Eksenleri
Onları ayrıntılı olarak inceleyelim -
Selenium'da içerir () nedir?
Selenium'da içerir (), belirli bir metni içeren web öğelerini aramak için kullanılan Xpath ifadesi içinde bir işlevdir. Web sayfasındaki XPath contains () işlevini kullanarak verilen metin değeriyle eşleşen tüm öğeleri çıkarabiliriz. XPath'te İçerenler, öğeyi kısmi metinle bulma yeteneğine sahiptir.
Örn. Burada bir çapa arıyoruz. 'SAP M' olarak metin içeriyor.
"// h4 / a [içerir (metin (), 'SAP M')]"
NOT: Bu http://demo.guru99.com/test/selenium-xpath.html üzerinde aşağıdaki XPath alıştırmasını uygulayabilirsiniz.
Selenium Webdriver'daki Kardeş Nedir?
Bir Selenyum Webdriver içinde Kardeş üst elemana bir kardeş bir web elemanını almak için kullanılan bir fonksiyondur. Üst öğe biliniyorsa, selenyum web sürücüsünde Xpath ifadesinin kardeş niteliğini kullanabilen web öğesi kolayca bulunabilir veya yerleştirilebilir.
XPath'deki Kardeş Örneği: Burada 'a' kardeş öğesi temelinde 'h4'ü buluyoruz
"// div [@ class = 'canvas- graph'] // a [@href = '/ muhasebe.html'] [i [@ class = 'icon-usd']] / following-sibling :: h4"
Ancestor : Üst öğe temelinde bir öğe bulmak için XPath'in ata niteliğini kullanabiliriz.
Bir örnek kullanarak bu 3 işlevi anlayalım -
Test Adımları
Not: Öğreticinin oluşturulduğu tarihten bu yana Guru99 Ana Sayfası güncellendi, bu nedenle testleri çalıştırmak için bunun yerine demo sitesini kullanın
- Http://demo.guru99.com/test/guru99home/ adresine gidin.
- 'En popüler kurslarımızdan birkaçı' bölümünde, metni 'SELENIUM' olan bir WebElement'in kardeşi olan tüm Web Öğelerinde arama yapın
- XPath text contains, ancestor ve sibling fonksiyonunu kullanarak element bulacağız.
İçerir ve XPath Kardeşi KULLANARAK
import java.util.List;içe aktar 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 {@Ölçekpublic void testSiblingAndParentInXpath () {WebDriver sürücüsü;String driverPath = "C: \\ geckodriver.exe";System.setProperty ("webdriver.gecko.driver", driverPath);sürücü = yeni FirefoxDriver ();driver.manage (). timeout (). örtük olarak Bekleme (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/guru99home/");// Kontrol kardeş 'SELENIUM' olan 'Popüler kurs' içinde arama elemanı, Burada ilk önce metni '' En popüler derslerimizden birkaçı 'olan bir h2 bulacağız, sonra onun ana elemanına geçiyoruz, bu a' div ', bu div içinde metni' SELENIUM 'olan bir bağlantı bulacağız ve sonunda bu bağlantının tüm kardeş öğelerini bulacağız (' SELENIUM ')ListdateBox = driver.findElements (By.xpath ("// h2 [içerir (text (), 'En popüler kurslarımızdan birkaçı')] / parent :: div // div [// a [metin () = 'SELENIUM']] / following-sibling :: div [@ class = 'rt-grid-2 rt-omega'] "));// "Popüler kurs" da "SELENIUM" adlı öğenin kardeşlerini yazdırıniçin (WebElement webElement: dateBox) {System.out.println (webElement.getText ());}driver.close ();}}
Çıktı şöyle olacaktır:
Selenium Webdriver'ın atası
Selenium Webdriver'daki ata, belirtilen katmanda belirli bir üyenin atasını bulmak için kullanılan bir işlevdir. Döndürülecek üst düzey düzeyi veya üyenin düzeyine göre atanın düzeyi açıkça belirtilebilir. Atadan gelen hiyerarşik adımların sayısını döndürür ve kullanıcının istediği belirtilen atayı bulur.
Şimdi, metni 'SELENIUM' olan çapanın atasının yardımıyla 'Popüler kurs' bölümündeki Tüm öğeleri Aramamız gerektiğini varsayalım.
Burada xpath sorgumuz şöyle olacak
"//div[.//a[text()='SELENIUM']]/ancestor::div[@class='rt-grid-2 rt-omega '] / following-sibling :: div"
Kodu tamamla
import java.util.List;içe aktar java.util.concurrent.TimeUnit;import org.openqa.selenium.By;org.openqa.selenium.Keys'i içe aktar;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;public class AncestorInXpath {@Ölçekpublic void testAncestorInXpath () {WebDriver sürücüsü = yeni FirefoxDriver ();driver.manage (). timeout (). örtük olarak Bekleme (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/guru99home/");// 'Popüler kurs' bölümündeki tüm öğeleri ara// metni 'SELENIUM' olan bağlantının atasının yardımıylaListedateBox = driver.findElements (By.xpath ("// div [.// a [text () = 'SELENIUM']] / ancestor :: div [@ class = 'rt-grid-2 rt- omega '] / following-sibling :: div "));// "Popüler kurs" da "SELENIUM" adlı öğenin kardeşlerini yazdırıniçin (WebElement webElement: dateBox) {System.out.println (webElement.getText ());}driver.quit ();}}
Çıktı şöyle görünecek:
AND ve OR kullanma
AND ve OR kullanarak XPath ifademize 2 koşul koyabilirsiniz.
- VE durumunda, her iki 2 koşul da doğru olmalıdır, o zaman yalnızca öğeyi bulur.
- OR durumunda, 2 koşuldan herhangi biri doğru olmalıdır, o zaman yalnızca öğeyi bulur.
Burada XPath sorgumuz şöyle olacak
Xpath = // * [@ type = 'submit' OR @ name = 'btnReset']
Xpath = // input [@ type = 'submit' ve @ name = 'btnLogin']
Test Adımları:
- Http://demo.guru99.com/v1/ adresine gidin
- Bu bölümde, XPath'in farklı işlevlerine sahip öğeyi aramak için yukarıdaki demo sitesini kullanacağız.
VE ve VEYA, ebeveyn, ile başlar ve XPath eksenlerini kullanan bir eleman bulacaksınız.
VE VEYA Örnek
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 sürücüsü;WebElement w, x;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");sürücü = yeni ChromeDriver ();// Uygulamayı başlatdriver.get ("https://www.guru99.com/");// xpath'de OR kullanarak eleman araw = driver.findElement (By.xpath ("// * [@ type = 'submit' OR @ name = 'btnReset']"));// Elemanın metnini yazdırınSystem.out.println (w.getText ());// xpath'de AND kullanarak eleman arax = driver.findElement (By.xpath ("// input [@ type = 'submit' ve @ name = 'btnLogin']"));// Aranan elemanın metnini yazdırınSystem.out.println (x.getText ());// Tarayıcıyı kapatındriver.quit ();}}
Selenyumda Ebeveyn Nedir?
Selenium'daki Parent , web sayfasında seçilen mevcut düğümün ebeveyn düğümünü almak için kullanılan bir yöntemdir. Bir öğe seçtiğinizde ve Xpath kullanarak ana öğeyi almanız gerektiğinde çok kullanışlıdır. Bu yöntem aynı zamanda ebeveynin ebeveynini almak için de kullanılır.
Burada XPath sorgumuz şöyle olacak
Xpath = // * [@ id = 'rt-feature'] // parent :: div
Ebeveyn kullanarak XPath
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 sürücüsü;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");sürücü = yeni ChromeDriver ();// Uygulamayı başlatdriver.get ("https://www.guru99.com/");// PARENT kullanarak öğeyi arayınw = driver.findElement (By.xpath ("// * [@ id = 'rt-feature'] // parent :: div"));// Aranan elemanın metnini yazdırınSystem.out.println (w.getText ());// Tarayıcıyı kapatındriver.quit ();}}
İle başlar
Starts-with işlevini kullanarak, yenileme veya tıklama, gönderme vb. Gibi diğer işlemlerde özniteliği dinamik olarak değişen öğeyi bulabilirsiniz.
Burada XPath sorgumuz şöyle olacak
Xpath = // etiket [ile başlar (@ id, 'mesaj')]
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 sürücüsü;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");sürücü = yeni ChromeDriver ();// Uygulamayı başlatdriver.get ("https://www.guru99.com/");// Start-with kullanarak öğeyi arayınw = driver.findElement (By.xpath ("// etiket [ile başlar (@ id, 'mesaj')]"));// Aranan elemanın metnini yazdırınSystem.out.println (w.getText ());// Tarayıcıyı kapatındriver.quit ();}}
Xpath eksenleri
XPath eksenlerini kullanarak, bir web sayfasında dinamik ve çok karmaşık öğeleri bulabilirsiniz. XPath eksenleri, bir elemanı bulmak için çeşitli yöntemler içerir. Burada birkaç yöntemi tartışacağız.
aşağıdaki : Bu işlev, belirli bir bileşenin anlık öğesini döndürecektir.
Burada XPath sorgumuz şöyle olacak
Xpath = // * [@ type = 'text'] // aşağıdaki :: input
Aşağıdakileri kullanarak XPath
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;public class İzleniyor {public static void main (String [] args) {WebDriver sürücüsü;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");sürücü = yeni ChromeDriver ();// Uygulamayı başlatdriver.get ("https://www.guru99.com/");// Aşağıdaki yöntemi kullanarak öğeyi arayınw = driver.findElement (By.xpath ("// * [@ type = 'text'] // aşağıdaki :: input"));// Aranan elemanın metnini yazdırınSystem.out.println (w.getText ());// Tarayıcıyı kapatındriver.quit ();}}
Önceki: Bu işlev, belirli öğenin önceki öğesini döndürür.
Burada XPath sorgumuz şöyle olacak
Xpath = // * [@ type = 'submit'] // preceding :: input
Preceding kullanarak XPath
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 sürücüsü;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");sürücü = yeni ChromeDriver ();// Uygulamayı başlatdriver.get ("https://www.guru99.com/");// Önceki yöntemi kullanarak öğeyi arayınw = driver.findElement (By.xpath ("// * [@ type = 'submit'] // preceding :: input"));// Aranan öğeyi yazdırınSystem.out.println (w.getText ());// Tarayıcıyı kapatındriver.quit ();}}
d) Descendant: Bu işlev, belirli bir elemanın alt elemanını döndürecektir.
Burada XPath sorgumuz şöyle olacak
Xpath = // * [@ id = 'rt-feature'] // soyundan :: a
Descendant kullanan XPath
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 sürücüsü;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");sürücü = yeni ChromeDriver ();// Uygulamayı başlatdriver.get ("https://www.guru99.com/");// Alt öğe yöntemini kullanarak öğeyi arayınw = driver.findElement (By.xpath ("// * [@ id = 'rt-feature'] // astsal :: a"));// Aranan öğeyi yazdırınSystem.out.println (w.getText ());// Tarayıcıyı kapatındriver.quit ();}}
Özet
- Normal XPath'in bir öğe bulmak için kullanılamadığı bazı durumlar vardır. Böyle bir durumda xpath sorgusundan farklı fonksiyonlara ihtiyacımız var.
- XPath içerir, ebeveyn, atalar, takip eden kardeş vb. Gibi bazı önemli XPath işlevleri vardır.
- Bu işlevlerin yardımıyla karmaşık XPath ifadeleri oluşturabilirsiniz.