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

mic*_*ael 16 capybara

试图让这个测试失败但没有成功.

我有这个HTML:

<div id="navigation">
 <ul>
  <li>
   <a href="/url">TV</a>
Run Code Online (Sandbox Code Playgroud)

然后我试图识别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')]")
Run Code Online (Sandbox Code Playgroud)

知道如何用capybara识别特定HTML元素的文本吗?和...有可能用CSS实现相同的目标吗?

干杯!

Jan*_*imo 16

从RSpec 2.11(2012年7月)开始,首选方法是使用以下expect语法:

expect(page).to have_css("#navigation a", text: "Radio")
Run Code Online (Sandbox Code Playgroud)

您可以将RSpec配置为仅接受此新语法以保持代码库的一致性.

  • 哈哈,未经处理的例外.固定! (4认同)

mic*_*ael 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')
Run Code Online (Sandbox Code Playgroud)