Как найти элемент, сопоставляя точный текст элемента в Capybara
У меня есть следующие два элемента в HTML
<a href="/berlin" >Berlin</a>
<a href="/berlin" >Berlin Germany </a>
Я пытаюсь найти элемент, используя следующий метод Capybara
find("a", :text => "berlin")
Выше возвращаются два элемента, потому что оба содержат текст berlin.
Есть ли способ сопоставить точный текст в Capybara?
Ответы
Ответ 1
Используйте значение regexp вместо строки для значения ключа :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"
Ответ 2
В зависимости от того, какую версию драгоценного камня вы используете
find('a', text: 'Berlin', exact: true)
может быть устаревшим. В этом случае вам придется использовать
find('a', text: 'Berlin', match: :prefer_exact)
Ответ 3
Просто используйте Точный вариант Capybara:
Capybara.exact = true
Ответ 4
Для использования click_link в капибаре вам нужно добавить еще одно свойство в метод, использующий его.
click_link(link_name, :text => link_name)
Здесь link_name - это текстовое значение ссылки. Используя ключевое слово : text, мы указываем, что хотим щелкнуть ссылку, текстовое значение которой точно соответствует нашим требованиям.
Ответ 5
Я предпочитаю использовать have_selector
с text
и exact_text: true
:
expect(body).to have_selector 'a', text: 'Berlin', exact_text: true