Як знайти елемент, зіставивши точний текст елемента в Capybara


102

У мене є наступні два елементи в HTML

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

Я намагаюся знайти елемент за допомогою методу Капібари

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

Вище повернеться два елементи, оскільки обидва містять текст Берлін.

Чи є спосіб співставити точний текст у Капібарі?


Капібара чи нокогірі? Чому це позначено обома?
pguardiario

Відповіді:



139

Використовуйте регулярне вираження замість рядка для значення :textключа:

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

Перегляньте розділ Method: Capybara::Node::Finders#all документації "Параметри" .

PS: текстові відповідники залежать від регістру. Ваш приклад код фактично викликає помилку:

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

13
Страшно, що це найкраща відповідь. : cry:
BM5k

чому ми маємо \ A і \ z між Берліном?
Каран Верма

1
як я можу додати заповнювач у регулярному
виразі

З цим можна було вчинити, написавшиclick_link(link_text, :text => link_text)
Пригадайте, чому ви розпочали

52

Залежно від того, яку версію дорогоцінного каменю ви використовуєте

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

може бути застарілим. У такому випадку вам доведеться скористатися

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

4

Я вважаю за краще використовувати have_selectorз textі exact_text: true:

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

4

Ви можете зробити це також:

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

Це знайде для CSS.

І використання лише exact: trueзамість exact_textпокаже вам повідомлення, що ця exactопція дійсна лише для XPATH.


2
або навіть більше, ви можете використовуватиfind("a", exact_text: "berlin")
Кукунін

0

Для використання click_link у capybara потрібно додати ще одне властивість у метод, що використовує його.

click_link(link_name, :text => link_name)

Тут ім'я посилання - це текстове значення посилання. Використовуючи : текстове слово, ми вказуємо, що хочемо натиснути на посилання, яке має значення тексту, яке точно відповідає нашій вимозі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.