Saya menggunakan XPather Browser untuk memeriksa ekspresi XPATH saya di halaman HTML.
Tujuan akhir saya adalah menggunakan ekspresi ini di Selenium untuk pengujian antarmuka pengguna saya.
Saya mendapat file HTML dengan konten yang mirip dengan ini:
<tr> <td> abc </td> <td> & nbsp; </td> </tr>
Saya ingin memilih node dengan teks yang berisi string "
".
Dengan string normal seperti "abc" tidak ada masalah. Saya menggunakan XPATH yang mirip dengan//td[text()="abc"]
.
Ketika saya mencoba dengan XPATH seperti //td[text()=" "]
itu tidak menghasilkan apa-apa. Apakah ada aturan khusus tentang teks dengan " &
"?
Jawaban:
Tampaknya OpenQA , orang-orang di belakang Selenium, telah mengatasi masalah ini. Mereka mendefinisikan beberapa variabel agar sesuai dengan spasi putih. Dalam kasus saya, saya perlu menggunakan XPATH yang mirip dengan
//td[text()="${nbsp}"]
.Saya mereproduksi di sini teks dari OpenQA tentang masalah ini (ditemukan di sini ):
sumber
\u00a0
. Yang berhasil bagi saya adalah mengetik spasi non-breaking, di macAlt+Shift+Space
. Pencarian web mengatakanAlt+0160
di windows.Saya menemukan saya dapat membuat pertandingan ketika saya memasukkan spasi non-breaking hard-code (U + 00A0) dengan mengetik Alt + 0160 di Windows di antara dua tanda kutip ...
bekerja untuk saya dengan karakter khusus.
Dari apa yang saya pahami, standar XPath 1.0 tidak menangani karakter Unicode yang keluar. Sepertinya ada fungsi untuk itu di XPath 2.0 tetapi sepertinya Firefox tidak mendukungnya (atau saya salah paham). Jadi, Anda harus melakukan dengan codepage lokal. Jelek, saya tahu.
Sebenarnya, sepertinya standarnya mengandalkan bahasa pemrograman yang menggunakan XPath untuk memberikan urutan escape Unicode yang benar ... Jadi, entah bagaimana, saya melakukan hal yang benar.
sumber
$col = $xpath->query("//p[text()=\"\xC2\xA0\"]");
Coba gunakan entitas desimal,
 
bukan entitas bernama. Jika itu tidak berhasil, Anda harus dapat menggunakan karakter unicode untuk spasi non-breaking daripada
entitas.(Catatan: Saya tidak mencoba ini di XPather, tetapi saya mencobanya di Oxygen.)
sumber
Ingatlah bahwa prosesor XML standar-compliant akan menggantikan entitas referensi lain dari lima yang standar XML ini (
&
,>
,<
,'
,"
) dengan yang sesuai karakter dalam pengkodean sasaran pada saat ekspresi XPath dievaluasi. Mengingat perilaku tersebut, saran PhiLho dan jsulak adalah cara yang tepat jika Anda ingin bekerja dengan alat XML. Saat Anda memasukkan 
ekspresi XPath, itu harus diubah ke urutan byte yang sesuai sebelum ekspresi XPath diterapkan.sumber
Saya tidak bisa mendapatkan kecocokan menggunakan Xpather, tetapi yang berikut ini berfungsi untuk saya dengan file XML dan XSL biasa di XML Notepad Microsoft:
Nilai yang dikembalikan adalah 1, yang merupakan nilai yang benar dalam kasus uji saya.
Namun, saya harus mendeklarasikan nbsp sebagai entitas dalam XML dan XSL saya menggunakan yang berikut ini:
Saya tidak yakin apakah itu membantu Anda, tetapi saya dapat benar - benar menemukan nbsp menggunakan ekspresi XPath.
Sunting: Contoh kode saya sebenarnya berisi karakter '& nbsp;' tetapi sorotan sintaks JavaScript mengubahnya menjadi karakter spasi. Jangan menyesatkan!
sumber
Cari
atau hanyanbsp
- apakah Anda mencoba ini?sumber
Sesuai HTML yang telah Anda berikan:
Untuk menemukan node dengan string
Anda dapat menggunakan salah satu dari berikut inixpath solusi berbasis:Menggunakan
text()
:Menggunakan
contains()
:Namun, idealnya Anda mungkin ingin menghindari karakter NO-BREAK SPACE dan menggunakan salah satu Strategi Penunjuk Lokasi berikut :
Menggunakan
<tr>
node induk danfollowing-sibling
:Menggunakan
starts-with()
:Menggunakan
<td>
node sebelumnya danfollowing
node and
following-sibling`:Referensi
Anda dapat menemukan pembahasan rinci yang relevan di:
menggunakan Seleniumtl; dr
Karakter Unicode 'NO-BREAK SPACE' (U + 00A0)
sumber
Anda dapat menggunakan XPath Contains, Sibling, Ancestor Functions di Selenium WebDriver untuk menemukan elemen yang tidak memiliki properti unik untuk diidentifikasi.
untuk lebih jelasnya, baca halaman ini: https://www.guru99.com/using-contains-sbiling-ancestor-to-find-element-in-selenium.html
sumber