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?

amjad
sumber
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"
pje
sumber
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)
Gabriel Pumple
sumber
4

Preferensi saya adalah menggunakan have_selectorwith textdan exact_text: true:

expect(body).to have_selector 'a', text: 'Berlin', exact_text: true
Paweł Gościcki
sumber
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.

CamiloVA
sumber
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.

Ingat Mengapa Anda Memulai
sumber