Cách tìm một phần tử bằng cách đối sánh văn bản chính xác của phần tử đó trong Capybara


102

Tôi có hai phần tử sau trong HTML

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

Tôi đang cố gắng tìm phần tử bằng cách sử dụng phương pháp Capybara sau

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

Ở trên sẽ trả về hai phần tử vì cả hai đều chứa văn bản berlin.

Có cách nào để khớp văn bản chính xác trong Capybara không?


Capybara hay nokogiri? Tại sao điều này được gắn thẻ cả hai?
pguardiario 14/12/12

Câu trả lời:



139

Sử dụng regexp thay vì một chuỗi cho giá trị của :textkhóa:

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

Kiểm tra phần 'Băm tùy chọn' của Method: Capybara::Node::Finders#all tài liệu .

Tái bút: kết hợp văn bản có phân biệt chữ hoa chữ thường. Mã ví dụ của bạn thực sự gây ra lỗi:

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

13
Thật khủng khiếp khi đây là câu trả lời tốt nhất. : cry:
BM5k

tại sao chúng ta có \ A và \ z giữa Berlin?
Karan Verma

1
làm cách nào để thêm trình giữ chỗ trong regex
FluffyBeing vào

Điều này có thể được xử lý bằng cách viếtclick_link(link_text, :text => link_text)
Hãy nhớ lý do tại sao bạn bắt đầu

52

Tùy thuộc vào phiên bản đá quý bạn đang sử dụng

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

có thể không được dùng nữa. Trong trường hợp đó bạn sẽ phải sử dụng

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

4

Sở thích của tôi là sử dụng have_selectorvới textexact_text: true:

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

4

Bạn cũng có thể làm như vậy:

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

Điều đó sẽ tìm thấy cho CSS.

Và chỉ sử dụng exact: truethay vì exact_textsẽ hiển thị cho bạn một tin nhắn rằng exacttùy chọn chỉ hợp lệ cho XPATH.


2
hoặc thậm chí nhiều hơn, bạn có thể sử dụngfind("a", exact_text: "berlin")
Kukunin

0

Để sử dụng click_link trong capybara, bạn cần thêm một thuộc tính nữa trong phương thức sử dụng nó.

click_link(link_name, :text => link_name)

Ở đây link_name là giá trị văn bản của một liên kết. Sử dụng : từ khóa text, chúng tôi đang chỉ định rằng chúng tôi muốn nhấp vào một liên kết có giá trị văn bản phù hợp chính xác với yêu cầu của chúng tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.