Di halaman web saya, ada div
dengan class
nama Test
.
Bagaimana saya bisa menemukannya XPath
?
Di halaman web saya, ada div
dengan class
nama Test
.
Bagaimana saya bisa menemukannya XPath
?
Jawaban:
Pemilih ini akan berfungsi tetapi akan lebih efisien jika Anda menggantinya dengan markup yang sesuai:
//*[contains(@class, 'Test')]
Atau, karena kita tahu elemen yang dicari adalah div
:
//div[contains(@class, 'Test')]
Tetapi karena ini juga akan cocok dengan kasus seperti class="Testvalue"
atau class="newTest"
, versi @ Tomalak yang disediakan dalam komentar lebih baik :
//div[contains(concat(' ', @class, ' '), ' Test ')]
Jika Anda ingin benar-benar yakin bahwa itu akan cocok dengan benar, Anda juga bisa menggunakan fungsi normalisasi-ruang untuk membersihkan karakter spasi kosong di sekitar nama kelas (seperti disebutkan oleh @Terry):
//div[contains(concat(' ', normalize-space(@class), ' '), ' Test ')]
Perhatikan bahwa dalam semua versi ini, * sebaiknya diganti dengan nama elemen apa pun yang sebenarnya ingin Anda cocokkan, kecuali jika Anda ingin mencari setiap elemen dalam dokumen untuk kondisi yang diberikan.
//div[contains(concat(' ', @class, ' '), ' Test ')]
- Milik Anda juga akan muncul pertandingan parsial.
Cara termudah ..
//div[@class="Test"]
Dengan asumsi Anda ingin menemukan <div class="Test">
seperti yang dijelaskan.
//
tidak hanya menggunakan /
.
Cara HANYA yang benar untuk melakukannya dengan XPath:
//div[contains(concat(" ", normalize-space(@class), " "), " Test ")]
Fungsi normalize-space
strip memimpin dan mengikuti spasi, dan juga mengganti urutan karakter spasi dengan satu spasi.
Jika tidak memerlukan banyak pertanyaan Xpath ini, Anda mungkin ingin menggunakan perpustakaan yang mengubah pemilih CSS ke XPath, karena pemilih CSS biasanya jauh lebih mudah untuk membaca dan menulis daripada permintaan XPath. Misalnya, dalam hal ini, Anda bisa menggunakan keduanya div[class~="Test"]
dan div.Test
untuk mendapatkan hasil yang sama.
Beberapa perpustakaan yang dapat saya temukan:
Saya hanya memberikan ini sebagai jawaban, seperti yang diberikan Tomalak sebagai komentar untuk jawaban meder dulu
//div[contains(concat(' ', @class, ' '), ' Test ')]
concat(' ', normalize-space(@class), ' ')
dengan menjelaskan semua jenis ruang putih juga?
//div[contains(concat(' ', @class, ' '), ' Test ')]/chid
tidak memilih anak-anak?
Fungsi yang bermanfaat dapat dibuat dari jawaban sebelumnya:
function matchClass($className) {
return "[contains(concat(' ', normalize-space(@class), ' '), ' $className ')]";
}
Kemudian, cukup masukkan panggilan fungsi ke dalam kueri Anda.
Anda dapat menemukan elemen seperti contoh ini (semua elemen css)
private By
allElementsCss = By.xpath(".//div[@class]");