【问题标题】:Capybara / RSpec Ensure somethinng does not exist anywhere on the pageCapybara / RSpec 确保页面上任何地方都不存在某些东西
【发布时间】:2020-09-11 15:16:26
【问题描述】:

我想了解如何确保页面上不存在某些内容,特别是具有已知值的 div。本质上,我正在删除一个元素,我想测试页面上的任何地方都不存在具有 3 个类的元素,并且有多个具有相同类的元素,所以重要的部分是确保 div 标记的内部不存在。

例如:

<div class="blah blah2 blah3">my pizza</div>

可能有 20 多个具有相同类 blah blah2 和 blah3 的 div,但是,我需要确保其中没有一个包含“我的披萨”一词,我如何使用 expect() 来做到这一点?

我尝试了类似的方法,但没有成功:

expect(all(:css, 'div.blah blah2 blah3').value).not_to eq('value'))

有什么想法吗?提示?

更新: 我尝试添加 assert_no_text('my Pizza') 但这会检查整个页面,我不知道这是否会在软件的未来版本中改变。

【问题讨论】:

    标签: ruby ruby-on-rails-3 testing rspec capybara


    【解决方案1】:

    我认为这样的事情应该可以帮助你:

    expect(page).not_to have_css('div.blah blah2 blah3', text: 'value')
    

    【讨论】:

      【解决方案2】:

      你可以的

      expect(page).to have_no_css('div.blah.blah2.blah3', text: 'my pizza')
      

      expect(page).not_to have_css('div.blah.blah2.blah3', text: 'my pizza')
      

      假设您已正确包含 Capybaras RSpec 匹配器,每个匹配器都会执行完全相同的操作,请等待 Capybara.default_max_wait_time 页面上的任何匹配元素消失。如果您不喜欢编写 CSS 类选择器(请注意,您需要在 CSS 选择器中的同一元素上的每个类之前添加一个 . - 您的空格分隔示例将查找嵌套元素)您也可以使用 class选项

      expect(page).not_to have_css('div', class: %w[blah blah2 blah3], text: 'my pizza') 
      

      此外,如果您有可能包含 my pizzamy pizza 2my pizza 3 的元素,并且您只想确保不存在 my pizza,您可以使用 exact_text 选项

      expect(page).not_to have_css('div.blah.blah2.blah3', exact_text: 'my pizza')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-12
        • 1970-01-01
        相关资源
        最近更新 更多