【问题标题】:Capybara: how to check the TEXT value of an element with xpath and css?Capybara:如何使用 xpath 和 css 检查元素的 TEXT 值?
【发布时间】:2021-03-01 02:37:30
【问题描述】:

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

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

干杯!

【问题讨论】:

    标签: capybara


    【解决方案1】:

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

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

    您可以configure RSpec 只接受这种新语法以保持您的代码库一致。

    【讨论】:

    • 哈哈,未处理的异常。固定!
    【解决方案2】:

    原来在“导航”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')
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        也许你可以用这个:

        expect(page).to have_xpath("//*[@href='']", text: 'TV')
        

        【讨论】:

        • 您可以通过添加解释以及它与其他现有答案的不同/更好的方式来改进您的答案
        • 我的想法是使用 xpath blend 与文本来选择和检查元素会更加严格,因为可能会有多个元素具有相同的类。上面也没有使用 xpath 的答案。
        【解决方案5】:

        它会帮助你:

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

        试试这个。

        【讨论】:

        • 我认为有一个错字。 :text == 'Radio' 应该是 :text =&gt; 'Radio'
        【解决方案6】:

        使用have_selector

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-11-22
          • 2010-12-08
          • 1970-01-01
          • 2012-09-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多