19

试图让这个测试失败而没有成功。

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

干杯!

4

6 回答 6

21

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

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

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

于 2015-12-05T12:27:08.280 回答
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')
于 2012-12-15T15:18:43.947 回答
0

它会帮助你:

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

尝试这个。

于 2013-01-31T13:39:36.750 回答
0

使用 have_selector

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

于 2021-02-28T18:37:30.130 回答
0

也许你可以使用这个:

expect(page).to have_xpath("//*[@href='']", text: 'TV')
于 2019-10-16T08:29:52.650 回答
0

把它放在这里,以便下次遇到它时可以找到它。: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 值更改,测试将失败。

于 2018-02-10T11:45:16.700 回答