Sekiranya XPath sederhana tidak dapat mencari elemen web yang rumit untuk skrip ujian kami, kami perlu menggunakan fungsi dari perpustakaan XPath 1.0. Dengan gabungan fungsi ini, kita dapat membuat XPath yang lebih spesifik. Mari kita bincangkan 3 fungsi tersebut -
- Mengandungi
- Adik beradik
- Leluhur
- Dan ATAU
- Ibu bapa
- Bermula dengan
- Paksi XPath
Mari kaji secara terperinci -
Apa yang mengandungi () dalam Selenium?
mengandung () dalam Selenium adalah fungsi dalam ekspresi Xpath yang digunakan untuk mencari elemen web yang berisi teks tertentu. Kita dapat mengekstrak semua elemen yang sesuai dengan nilai teks yang diberikan menggunakan fungsi XPath mengandung () di seluruh laman web. Mengandungi dalam XPath mempunyai keupayaan untuk mencari elemen dengan teks separa.
Cth. Di sini kita mencari sauh. Mengandungi teks sebagai 'SAP M'.
"// h4 / a [mengandungi (teks (), 'SAP M')]"
CATATAN: Anda boleh melakukan latihan XPath berikut di http://demo.guru99.com/test/selenium-xpath.html ini
Apa itu Saudara di Selenium Webdriver?
A Adik-beradik dalam Selenium Webdriver adalah fungsi yang digunakan untuk mengambil elemen web yang merupakan adik-beradik kepada unsur induk. Sekiranya elemen induk diketahui maka elemen web dapat dijumpai atau dijumpai dengan mudah yang boleh menggunakan atribut saudara dari ungkapan Xpath dalam pemacu web selenium.
Adik beradik di XPath Contoh: Di sini berdasarkan elemen saudara dari 'a' kita menjumpai 'h4'
"// div [@ class = 'canvas- graph'] // a [@href = '/ accounting.html'] [i [@ class = 'icon-usd']] / following-saudara :: h4"
Leluhur : Untuk mencari elemen berdasarkan elemen induk kita boleh menggunakan atribut nenek moyang XPath.
Mari kita fahami 3 fungsi ini menggunakan contoh -
Langkah Ujian
Catatan: Sejak tarikh pembuatan tutorial, Laman Utama Guru99 telah dikemas kini, jadi gunakan laman demo sebagai ganti untuk menjalankan ujian
- Pergi ke http://demo.guru99.com/test/guru99home/
- Di bahagian 'Beberapa kursus kami yang paling popular', cari semua Elemen Web yang merupakan saudara dari WebElement yang teksnya adalah 'SELENIUM'
- Kita akan menemui elemen menggunakan teks XPath berisi, fungsi leluhur dan saudara.
MENGGUNAKAN Mengandungi 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;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;kelas awam SiblingAndParentInXpath {@ Ujianujian kekosongan awamSiblingAndParentInXpath () {Pemacu WebDriver;String driverPath = "C: \\ geckodriver.exe";System.setProperty ("webdriver.gecko.driver", driverPath);driver = FirefoxDriver baru ();driver.manage (). timeout (). secara implisitWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/guru99home/");// Cari elemen di dalam 'Kursus popular' yang merupakan saudara kawalan 'SELENIUM', Di sini pertama kita akan menjumpai h2 yang teksnya adalah '' Beberapa kursus paling popular kami ', kemudian kita beralih ke elemen induknya yang merupakan' div ', di dalam div ini kita akan menemui pautan yang teksnya adalah' SELENIUM 'dan akhirnya kita akan menjumpai semua unsur saudara dari pautan ini (' SELENIUM ')SenaraikandateBox = driver.findElements (By.xpath ("// h2 [mengandungi (teks (), 'Beberapa kursus kami yang paling popular')] / ibu bapa :: div // div [// a [teks () = 'SELENIUM']] / saudara-saudara berikut :: div [@ class = 'rt-grid-2 rt-omega'] "));// Cetak semua elemen dari elemen yang dinamakan sebagai 'SELENIUM' dalam 'Kursus popular'untuk (WebElement webElement: dateBox) {System.out.println (webElement.getText ());}pemandu.tutup ();}}
Keluaran akan seperti:
Leluhur di Selenium Webdriver
Leluhur dalam Selenium Webdriver adalah fungsi yang digunakan untuk mencari nenek moyang anggota tertentu pada lapisan yang ditentukan. Tahap nenek moyang yang akan dikembalikan atau tahap nenek moyang yang relatif dengan tahap anggota dapat dinyatakan dengan jelas. Ia mengembalikan sejumlah langkah hierarki dari nenek moyang, mencari nenek moyang yang ditentukan yang dikehendaki pengguna.
Sekarang anggap kita perlu Cari Semua elemen di bahagian 'Kursus popular' dengan bantuan nenek moyang jangkar yang teksnya adalah 'SELENIUM'
Berikut adalah pertanyaan xpath kami
"//div[.//a[text()='SELENIUM']]/ancestor::div[@class='rt-grid-2 rt-omega '] / following-sibling :: div"
Kod Lengkap
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;kelas awam AncestorInXpath {@ Ujianujian kekosongan awamAncestorInXpath () {Pemacu WebDriver = FirefoxDriver baru ();driver.manage (). timeout (). secara implisitWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/test/guru99home/");// Cari Semua elemen di bahagian 'Kursus popular'// dengan bantuan nenek moyang jangkar yang teksnya adalah 'SELENIUM'SenaraikandateBox = driver.findElements (By.xpath ("// div [.// a [text () = 'SELENIUM']] / leluhur :: div [@ class = 'rt-grid-2 rt- omega '] / following-saudara :: div "));// Cetak semua elemen saudara yang dinamakan sebagai 'SELENIUM' dalam 'Kursus popular'untuk (WebElement webElement: dateBox) {System.out.println (webElement.getText ());}driver.quit ();}}
Output akan kelihatan seperti-
Menggunakan DAN dan ATAU
Dengan menggunakan AND dan ATAU anda boleh meletakkan 2 syarat dalam ekspresi XPath kami.
- Sekiranya AND dan kedua-dua syarat itu mesti benar maka hanya ia yang akan menemukan unsurnya.
- Sekiranya terdapat salah satu daripada 2 syarat, maka hanya elemen yang dijumpai.
Berikut adalah pertanyaan XPath kami
Xpath = // * [@ type = 'submit' ATAU @ name = 'btnReset']
Xpath = // input [@ type = 'submit' dan @ name = 'btnLogin']
Langkah Ujian:
- Pergi ke http://demo.guru99.com/v1/
- Pada bahagian tersebut, akan menggunakan laman demo di atas untuk mencari elemen dengan fungsi XPath yang berbeza.
Anda akan menemui unsur menggunakan paksi AND dan OR, induk, permulaan, dan XPath
DAN ATAU Contoh
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;kelas awam AND_OR {utama kekosongan statik awam (String [] args) {Pemacu WebDriver;WebElement w, x;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");pemacu = ChromeDriver baru ();// Lancarkan aplikasidriver.get ("https://www.guru99.com/");// Cari elemen menggunakan ATAU 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' dan @ name = 'btnLogin']"));// Cetak teks elemen yang dicariSystem.out.println (x.getText ());// Tutup penyemak imbasdriver.quit ();}}
Apa itu Ibu Bapa di Selenium?
Parent in Selenium adalah kaedah yang digunakan untuk mengambil simpul induk node semasa yang dipilih di halaman web. Ia sangat berguna dalam keadaan ketika anda memilih elemen dan perlu mendapatkan elemen induk menggunakan Xpath. Kaedah ini juga digunakan untuk mendapatkan ibu bapa ibu bapa.
Berikut adalah pertanyaan XPath kami
Xpath = // * [@ id = 'rt-feature'] // induk :: div
XPath menggunakan Ibu Bapa
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;Ibu bapa kelas awam {utama kekosongan statik awam (String [] args) {Pemacu WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");pemacu = ChromeDriver baru ();// Lancarkan aplikasidriver.get ("https://www.guru99.com/");// Cari elemen dengan menggunakan PARENTw = driver.findElement (By.xpath ("// * [@ id = 'rt-feature'] // induk :: div"));// Cetak teks elemen yang dicariSystem.out.println (w.getText ());// Tutup penyemak imbasdriver.quit ();}}
Bermula dengan
Dengan menggunakan fungsi Starts-with, anda dapat mencari elemen yang atributnya berubah secara dinamik pada penyegaran atau operasi lain seperti klik, hantar, dll.
Berikut adalah pertanyaan XPath kami
Xpath = // label [dimulakan dengan (@ id, 'message')]
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;kelas awam StartsWith {utama kekosongan statik awam (String [] args) {Pemacu WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");pemacu = ChromeDriver baru ();// Lancarkan aplikasidriver.get ("https://www.guru99.com/");// Cari elemen dengan menggunakan permulaanw = driver.findElement (By.xpath ("// label [dimulakan dengan (@ id, 'message')]"));// Cetak teks elemen yang dicariSystem.out.println (w.getText ());// Tutup penyemak imbasdriver.quit ();}}
Paksi Xpath
Dengan menggunakan paksi XPath, anda dapat menemui elemen dinamik dan sangat kompleks di laman web. Paksi XPath mengandungi beberapa kaedah untuk mencari unsur. Di sini, akan membincangkan beberapa kaedah.
berikut : Fungsi ini akan mengembalikan unsur langsung komponen tertentu.
Berikut adalah pertanyaan XPath kami
Xpath = // * [@ type = 'text'] // berikut :: input
XPath menggunakan berikut
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;kelas awam Mengikuti {utama kekosongan statik awam (String [] args) {Pemacu WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");pemacu = ChromeDriver baru ();// Lancarkan aplikasidriver.get ("https://www.guru99.com/");// Cari elemen dengan menggunakan kaedah Mengikutiw = driver.findElement (By.xpath ("// * [@ type = 'text'] // berikut :: input"));// Cetak teks elemen yang dicariSystem.out.println (w.getText ());// Tutup penyemak imbasdriver.quit ();}}
Preding: Fungsi ini akan mengembalikan elemen sebelumnya dari elemen tertentu.
Berikut adalah pertanyaan XPath kami
Xpath = // * [@ type = 'submit'] // sebelum :: input
XPath menggunakan Preceding
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;kelas awam Terdahulu {utama kekosongan statik awam (String [] args) {Pemacu WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");pemacu = ChromeDriver baru ();// Lancarkan aplikasidriver.get ("https://www.guru99.com/");// Cari elemen dengan menggunakan kaedah sebelumnyaw = driver.findElement (By.xpath ("// * [@ type = 'submit'] // sebelumnya :: input"));// Cetak elemen yang dicariSystem.out.println (w.getText ());// Tutup penyemak imbasdriver.quit ();}}
d) Keturunan: Fungsi ini akan mengembalikan unsur keturunan unsur tertentu.
Berikut adalah pertanyaan XPath kami
Xpath = // * [@ id = 'rt-feature'] // keturunan :: a
XPath menggunakan Descendant
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;keturunan kelas awam {utama kekosongan statik awam (String [] args) {Pemacu WebDriver;WebElement w;System.setProperty ("webdriver.chrome.driver", "E: //Selenium//Selenium_Jars//chromedriver.exe");pemacu = ChromeDriver baru ();// Lancarkan aplikasidriver.get ("https://www.guru99.com/");// Cari elemen dengan menggunakan kaedah keturunanw = driver.findElement (By.xpath ("// * [@ id = 'rt-feature'] // keturunan :: a"));// Cetak elemen yang dicariSystem.out.println (w.getText ());// Tutup penyemak imbasdriver.quit ();}}
Ringkasan
- Terdapat beberapa situasi ketika XPath biasa tidak dapat digunakan untuk mencari elemen. Dalam keadaan seperti itu, kita memerlukan fungsi yang berbeza dari pertanyaan xpath.
- Terdapat beberapa fungsi penting XPath seperti XPath, ibu bapa, nenek moyang, saudara-saudara, dll.
- Dengan bantuan fungsi ini, anda dapat membuat ekspresi XPath yang kompleks.