如何测试RSpec不存在元素?

时间:2013-06-23 13:38:42

标签: rspec capybara

如何测试元素不存在? 我尝试了以下操作,但得到错误textarea#Question1Text does not exist而不是通过测试。

it "should not have question 1" do
  find('textarea#Question1Text').should_not be
end

it { should_not find('textarea#Question1Text') }

3 个答案:

答案 0 :(得分:4)

您可以使用其中一个水豚匹配器(特别是have_css)来测试元素是否存在。

it 'should not have question1' do
  page.should_not have_css('textarea#Question1Text')
end

答案 1 :(得分:2)

建议执行此操作的方法的问题是,如果例如在单击按钮后隐藏字段,则它们将具有竞争条件。在这种情况下,它会在单击按钮之后但在javascript有机会找到它之前抓取页面,因此您的测试可能会失败。它往往是间歇性的,主要发生在像phantomjs这样的快速无头浏览器上。

相反,我建议你使用类似的东西:

expect(page).to have_selector("#id_of_element")

这将等到条件为真,但如果失败则仍会快速超时。

答案 2 :(得分:1)

容易羞怯

expect{page.find_by_id("update-#{term1.id}").should}.not_to raise_error
expect{page.find_by_id("update-#{term4.id}")}.to  raise_error

如果你没有独特的ID,那么Css作为spullen建议会起作用