Jika XPath sederhana tidak dapat menemukan elemen web yang rumit untuk skrip pengujian kami, kami perlu menggunakan fungsi dari pustaka XPath 1.0. Dengan kombinasi fungsi-fungsi ini, kita dapat membuat XPath yang lebih spesifik. Mari kita bahas 3 fungsi tersebut -
- Mengandung
- Saudara kandung
- Leluhur
- Dan ATAU
- Induk
- Dimulai dengan
- Sumbu XPath
Mari kita pelajari secara detail -
Apa yang mengandung () di Selenium?
contains () di Selenium adalah fungsi dalam ekspresi Xpath yang digunakan untuk mencari elemen web yang berisi teks tertentu. Kita bisa mengekstrak semua elemen yang cocok dengan nilai teks yang diberikan menggunakan fungsi XPath contains () di seluruh halaman web. Berisi di XPath memiliki kemampuan untuk menemukan elemen dengan teks parsial.
Ex. Di sini kami mencari jangkar. Berisi teks sebagai 'SAP M'.
"// h4 / a [berisi (teks (), 'SAP M')]"
CATATAN: Anda dapat berlatih latihan XPath berikut di http://demo.guru99.com/test/selenium-xpath.html
Apa Saudara di Selenium Webdriver?
A Sibling in Selenium Webdriver adalah fungsi yang digunakan untuk mengambil elemen web yang merupakan saudara dari elemen induk. Jika elemen induk diketahui maka elemen web dapat dengan mudah ditemukan atau ditemukan yang dapat menggunakan atribut sibling dari ekspresi Xpath di selenium webdriver.
Contoh Saudara di XPath: Di sini atas dasar elemen saudara dari 'a' kami menemukan 'h4'
"// div [@ class = 'canvas- graph'] // a [@href = '/ accounting.html'] [i [@ class = 'icon-usd']] / following-sibling :: h4"
Ancestor : Untuk menemukan elemen berdasarkan elemen induk kita dapat menggunakan atribut leluhur XPath.
Mari kita pahami 3 fungsi ini menggunakan contoh -
Langkah Tes
Catatan: Sejak tanggal pembuatan tutorial, Beranda Guru99 telah diperbarui jadi gunakan situs demo sebagai gantinya untuk menjalankan tes
- Buka http://demo.guru99.com/test/guru99home/
- Di bagian 'Beberapa kursus kami yang paling populer', cari semua Elemen Web yang merupakan saudara dari WebElement yang teksnya adalah 'SELENIUM'
- Kita akan menemukan elemen menggunakan teks berisi XPath, fungsi leluhur dan saudara kandung.
MENGGUNAKAN Berisi dan 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;impor org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;public class SiblingAndParentInXpath {@Ujipublic void testSiblingAndParentInXpath () {Driver WebDriver;String driverPath = "C: \\ geckodriver.exe";System.setProperty ("webdriver.gecko.driver", driverPath);driver = baru FirefoxDriver ();driver.manage (). timeout (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/guru99home/");// Cari elemen di dalam 'Kursus populer' yang merupakan saudara dari kontrol 'SELENIUM', Di sini pertama-tama kita akan menemukan h2 yang teksnya adalah '' Beberapa kursus terpopuler kami ', kemudian kita pindah ke elemen induknya yaitu' div ', di dalam div ini kita akan menemukan link yang teksnya' SELENIUM 'lalu akhirnya kita akan menemukan semua sibling elemen dari link ini (' SELENIUM ')DaftardateBox = driver.findElements (By.xpath ("// h2 [berisi (text (), 'Beberapa kursus kami yang paling populer')] / parent :: div // div [// a [text () = 'SELENIUM']] / following-sibling :: div [@ class = 'rt-grid-2 rt-omega'] "));// Cetak semua yang merupakan saudara dari elemen bernama 'SELENIUM' di 'Kursus populer'untuk (WebElement webElement: dateBox) {System.out.println (webElement.getText ());}driver.close ();}}
Outputnya akan seperti:
Leluhur di Selenium Webdriver
Ancestor di Selenium Webdriver adalah fungsi yang digunakan untuk menemukan leluhur anggota tertentu di lapisan yang ditentukan. Level leluhur yang akan dikembalikan atau level leluhur relatif terhadap level anggota dapat ditentukan secara eksplisit. Ini mengembalikan jumlah langkah hierarki dari leluhur, menemukan leluhur tertentu yang diinginkan pengguna.
Sekarang misalkan kita perlu Mencari Semua elemen di bagian 'Kursus populer' dengan bantuan leluhur jangkar yang teksnya adalah 'SELENIUM'
Di sini kueri xpath kami akan seperti
"//div[.//a[text()='SELENIUM']]/ancestor::div[@class='rt-grid-2 rt-omega '] / following-sibling :: div"
Kode Lengkap
import java.util.List;import java.util.concurrent.TimeUnit;import org.openqa.selenium.By;impor org.openqa.selenium.Keys;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;impor org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;public class AncestorInXpath {@Ujipublic void testAncestorInXpath () {Driver WebDriver = FirefoxDriver baru ();driver.manage (). timeout (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/guru99home/");// Cari Semua elemen di bagian 'Kursus populer'// dengan bantuan leluhur jangkar yang teksnya 'SELENIUM'DaftardateBox = driver.findElements (By.xpath ("// div [.// a [text () = 'SELENIUM']] / leluhur :: div [@ class = 'rt-grid-2 rt- omega '] / following-sibling :: div "));// Cetak semua yang merupakan saudara dari elemen bernama 'SELENIUM' di 'Kursus populer'untuk (WebElement webElement: dateBox) {System.out.println (webElement.getText ());}driver.quit ();}}
Output akan terlihat seperti-
Menggunakan DAN dan ATAU
Dengan menggunakan AND dan OR Anda dapat menempatkan 2 kondisi di ekspresi XPath kami.
- Dalam kasus AND kedua 2 kondisi harus benar maka hanya itu yang menemukan elemennya.
- Dalam kasus OR salah satu dari 2 kondisi harus benar maka hanya itu yang menemukan elemen.
Di sini kueri XPath kami akan seperti
Xpath = // * [@ type = 'submit' OR @ name = 'btnReset']
Xpath = // input [@ type = 'submit' dan @ name = 'btnLogin']
Langkah Tes:
- Buka http://demo.guru99.com/v1/
- Di bagian tersebut, akan menggunakan situs demo di atas untuk mencari elemen dengan fungsi XPath yang berbeda.
Anda akan menemukan elemen menggunakan sumbu AND dan OR, parent, begin-with, dan XPath
DAN ATAU Contoh
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;impor org.openqa.selenium.chrome.ChromeDriver;kelas umum AND_OR {public static void main (String [] args) {Driver WebDriver;WebElement w, x;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = new ChromeDriver ();// Luncurkan aplikasidriver.get ("https://www.guru99.com/");// Cari elemen menggunakan OR di xpathw = driver.findElement (By.xpath ("// * [@ type = 'submit' OR @ name = 'btnReset']"));// Cetak teks elemenSystem.out.println (w.getText ());// Cari elemen menggunakan AND di xpathx = driver.findElement (By.xpath ("// input [@ type = 'submit' and @ name = 'btnLogin']"));// Cetak teks dari elemen yang dicariSystem.out.println (x.getText ());// Tutup browserdriver.quit ();}}
Apa itu Parent di Selenium?
Parent in Selenium adalah metode yang digunakan untuk mengambil node induk dari node saat ini yang dipilih di halaman web. Ini sangat berguna dalam situasi ketika Anda memilih elemen dan perlu mendapatkan elemen induk menggunakan Xpath. Metode ini juga digunakan untuk mendapatkan orang tua dari orang tua.
Di sini kueri XPath kami akan seperti
Xpath = // * [@ id = 'rt-feature'] // induk :: div
XPath menggunakan Parent
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;impor org.openqa.selenium.chrome.ChromeDriver;public class Parent {public static void main (String [] args) {Driver WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = new ChromeDriver ();// Luncurkan aplikasidriver.get ("https://www.guru99.com/");// Cari elemen dengan menggunakan PARENTw = driver.findElement (By.xpath ("// * [@ id = 'rt-feature'] // parent :: div"));// Cetak teks dari elemen yang dicariSystem.out.println (w.getText ());// Tutup browserdriver.quit ();}}
Dimulai dengan
Menggunakan fungsi Starts-with, Anda dapat menemukan elemen yang atributnya berubah secara dinamis saat refresh atau operasi lain seperti klik, kirim, dll.
Di sini kueri XPath kami akan seperti
Xpath = // label [dimulai-dengan (@ id, 'message')]
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;impor org.openqa.selenium.chrome.ChromeDriver;kelas publik StartsWith {public static void main (String [] args) {Driver WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = new ChromeDriver ();// Luncurkan aplikasidriver.get ("https://www.guru99.com/");// Cari elemen dengan menggunakan begin-withw = driver.findElement (By.xpath ("// label [dimulai-dengan (@ id, 'message')]"));// Cetak teks dari elemen yang dicariSystem.out.println (w.getText ());// Tutup browserdriver.quit ();}}
Sumbu Xpath
Dengan menggunakan sumbu XPath, Anda dapat menemukan elemen dinamis dan sangat kompleks di halaman web. Sumbu XPath berisi beberapa metode untuk menemukan elemen. Di sini, akan dibahas beberapa metode.
berikut : Fungsi ini akan mengembalikan elemen langsung dari komponen tertentu.
Di sini kueri XPath kami akan seperti
Xpath = // * [@ type = 'text'] // berikut :: input
XPath menggunakan mengikuti
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;impor org.openqa.selenium.chrome.ChromeDriver;public class Mengikuti {public static void main (String [] args) {Driver WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = new ChromeDriver ();// Luncurkan aplikasidriver.get ("https://www.guru99.com/");// Cari elemen dengan menggunakan metode Mengikutiw = driver.findElement (By.xpath ("// * [@ type = 'text'] // following :: input"));// Cetak teks dari elemen yang dicariSystem.out.println (w.getText ());// Tutup browserdriver.quit ();}}
Sebelumnya: Fungsi ini akan mengembalikan elemen sebelumnya dari elemen tertentu.
Di sini kueri XPath kami akan seperti
Xpath = // * [@ type = 'submit'] // sebelum :: input
XPath menggunakan Preceding
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;impor org.openqa.selenium.chrome.ChromeDriver;public class Sebelum {public static void main (String [] args) {Driver WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = new ChromeDriver ();// Luncurkan aplikasidriver.get ("https://www.guru99.com/");// Cari elemen dengan menggunakan metode sebelumnyaw = driver.findElement (By.xpath ("// * [@ type = 'submit'] // sebelum :: input"));// Cetak elemen yang dicariSystem.out.println (w.getText ());// Tutup browserdriver.quit ();}}
d) Keturunan: Fungsi ini akan mengembalikan elemen keturunan dari elemen tertentu.
Di sini kueri XPath kami akan seperti
Xpath = // * [@ id = 'rt-feature'] // keturunan :: a
XPath menggunakan Descendant
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;impor org.openqa.selenium.chrome.ChromeDriver;public class Descendant {public static void main (String [] args) {Driver WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");driver = new ChromeDriver ();// Luncurkan aplikasidriver.get ("https://www.guru99.com/");// Cari elemen dengan menggunakan metode turunanw = driver.findElement (By.xpath ("// * [@ id = 'rt-feature'] // descendant :: a"));// Cetak elemen yang dicariSystem.out.println (w.getText ());// Tutup browserdriver.quit ();}}
Ringkasan
- Ada beberapa situasi ketika XPath biasa tidak dapat digunakan untuk menemukan elemen. Dalam situasi seperti itu, kami membutuhkan fungsi yang berbeda dari kueri xpath.
- Ada beberapa fungsi XPath penting seperti XPath berisi, orang tua, leluhur, saudara-saudara berikut, dll.
- Dengan bantuan fungsi ini, Anda dapat membuat ekspresi XPath yang kompleks.