Capybara:如何使用xpath和css检查元素的TEXT值?

时间:2012-12-12 23:13:57

标签: capybara

尝试使此测试失败但没有成功。

我有这个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实现相同的目标?

干杯!

6 个答案:

答案 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")

相关问题