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')