Cara menemukan elemen dengan mencocokkan teks yang tepat dari elemen di Kapibara


102

Saya mengikuti dua elemen dalam HTML

<a href="/berlin" >Berlin</a>
<a href="/berlin" >Berlin Germany </a>

Saya mencoba menemukan elemen dengan menggunakan metode Capybara berikut

find("a", :text => "berlin")

Di atas akan mengembalikan dua elemen karena keduanya mengandung teks berlin.

Apakah ada cara untuk mencocokkan teks yang sama persis di Kapibara?


Kapibara atau nokogiri? Mengapa ini diberi tag keduanya?
pguardiario

Jawaban:



139

Gunakan regexp sebagai ganti string untuk nilai :textkunci:

find("a", :text => /\ABerlin\z/)

Lihat bagian 'Opsi Hash' dari Method: Capybara::Node::Finders#all dokumentasi .

PS: kecocokan teks peka huruf besar / kecil. Kode contoh Anda sebenarnya menimbulkan kesalahan:

find("a", :text => "berlin")
# => Capybara::ElementNotFound:
#    Unable to find css "a" with text "berlin"

13
Sangat buruk bahwa ini adalah jawaban terbaik. : menangis:
BM5k

mengapa ada \ A dan \ z antara Berlin?
Karan Verma

1
bagaimana saya bisa menambahkan placeholder di regex
FluffyBeing

Ini bisa ditangani dengan menulisclick_link(link_text, :text => link_text)
Remember Why You Started

52

Bergantung pada versi permata yang Anda gunakan

find('a', text: 'Berlin', exact: true)

mungkin sudah usang. Dalam hal ini Anda harus menggunakan

find('a', text: 'Berlin', match: :prefer_exact)

4

Preferensi saya adalah menggunakan have_selectorwith textdan exact_text: true:

expect(body).to have_selector 'a', text: 'Berlin', exact_text: true

4

Anda juga dapat melakukannya:

find('a', text: 'Berlin', exact_text: true)

Itu akan menemukan CSS.

Dan hanya menggunakan exact: truesebagai ganti dari exact_textakan menampilkan pesan bahwa exactopsi tersebut hanya berlaku untuk XPATH.


2
atau bahkan lebih, Anda dapat menggunakanfind("a", exact_text: "berlin")
Kukunin

0

Untuk menggunakan click_link di kapibara, Anda perlu menambahkan satu properti lagi dalam metode yang menggunakannya.

click_link(link_name, :text => link_name)

Di sini nama_link adalah nilai teks dari sebuah tautan. Menggunakan : kata kunci teks kami menentukan bahwa kami ingin mengklik tautan yang memiliki nilai teks yang sama persis dengan kebutuhan kami.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.