Capybara: как проверить значение TEXT элемента с xpath и css?

Попытка выполнить этот тест без успеха.

У меня есть этот HTML:

<div id="navigation">
 <ul>
  <li>
   <a href="/url">TV</a>

И затем я пытался идентифицировать текст элемента A и сделать его неактивным.

Я использовал все следующие выражения с Xpath, но все они продолжают проходить, хотя я использую другой текст для сравнения: S

page.should have_xpath("//div[@id='navigation']//a", :content => 'Radio')
page.should have_xpath("//div[@id='navigation']//a", :text => 'Radio')
page.should have_xpath("//div[@id='navigation']//a[contains(string(),'Radio')]")
page.should have_xpath("//div[@id='navigation']//a[contains(text(),'Radio')]")
page.should have_xpath("//div[@id='navigation']//a[contains(.,'Radio')]")

Любая идея, как я мог бы идентифицировать текст определенного элемента HTML с capybara? и... возможно ли добиться этого с помощью CSS?

Ура!

Ответ 1

Оказывается, что существует еще один элемент с текстом "Радио" в "навигации" DIV, поэтому это вызвало сбой теста.

Для дальнейшего использования идентификация 1-го элемента явно ведет себя так, как ожидалось, и не проходит тест:

page.first('div#navigation a').text.should == 'Radio')
page.first('div#navigation a').text.should eq('Radio')
page.first('div#navigation a').text.should match('Radio')
page.first('div#navigation a').text.should be('Radio')

Ответ 2

Как и RSpec 2.11 (июль 2012 г.), предпочтительным способом является использование синтаксиса expect:

expect(page).to have_css("#navigation a", text: "Radio")

Вы можете настроить RSpec, чтобы принять этот новый синтаксис, чтобы ваша кодовая константа была непротиворечивой.

Ответ 3

Это поможет вам:

page.should have_css('div#navigation a', :text == 'Radio')

попробуй это.

Ответ 4

Поместите это здесь, чтобы я мог найти его в следующий раз, когда я столкнусь с этим.: P

Мой html выглядит так:

<a href="https://foo.com" id="foo-link">@foo</a>

Я хочу найти текст и значение url и утверждать, что они верны. Используя Capybary 2.16, Rails 5.1 и minitest здесь, как я это сделал:

assert_selector 'a#foo-link[href="https://foo.com"]', text: '@foo'

Если значение ID, текст или значение href изменится, тест завершится с ошибкой.

Ответ 5

Может быть, вы можете использовать это:

expect(page).to have_xpath("//*[@href='']", text: 'TV')