尝试使此测试失败但没有成功。
我有这个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')]")
知道如何用capybara识别特定HTML元素的文本吗? 和...是否有可能用CSS实现相同的目标?
干杯!
答案 0 :(得分:15)
自RSpec 2.11(2012年7月)起,首选方法是使用expect(page).to have_css("#navigation a", text: "Radio")
语法:
{{1}}
您NumPy
只能接受这种新语法,以保持代码库的一致性。
答案 1 :(得分:12)
事实证明,'导航'DIV中有另一个带有'Radio'文本的元素,因此导致测试失败。
为了将来参考,确定第一个元素明确表现为预期并且未通过测试:
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 :(得分:0)
它会帮助你:
page.should have_css('div#navigation a',:text =='Radio')
试试这个。
答案 3 :(得分:0)
把它放在这里所以我可以在下次碰到它时找到它。 :P
我的HTML看起来像这样:
<a href="https://foo.com" id="foo-link">@foo</a>
我想找到text和url值并声明它们是正确的。使用Capybary 2.16,Rails 5.1和minitest,我是如何做到的:
assert_selector 'a#foo-link[href="https://foo.com"]', text: '@foo'
如果ID,文本或href值发生更改,则测试将失败。
答案 4 :(得分:0)
也许您可以使用此:
expect(page).to have_xpath("//*[@href='']", text: 'TV')
答案 5 :(得分:0)
使用 have_selector
expect(page).to have_selector("#navigation a", text: "Radio")