Ruby on rails 看得见的当它应该为false时是否返回true

Ruby on rails 看得见的当它应该为false时是否返回true,ruby-on-rails,dom,attributes,capybara,Ruby On Rails,Dom,Attributes,Capybara,在rails应用程序中,我有以下css #step2 { display:none } 我对这种情况的测试在这里 Then /^I should not see "([^\"]*)" because it is hidden$/ do |id| s=page.find(id) expect(s.visible?).to be false end 当我手动打开页面时,该部分不可见 错误是 expected true got false (RSpec::Expec

在rails应用程序中,我有以下css

#step2 { display:none }
我对这种情况的测试在这里

Then /^I should not see "([^\"]*)" because it is hidden$/ do |id|
  s=page.find(id)
  expect(s.visible?).to be false
end
当我手动打开页面时,该部分不可见

错误是

  expected true
       got false
   (RSpec::Expectations::ExpectationNotMetError)
  ./features/step_definitions/navagation_steps.rb:85:in `/^I should not see "([^\"]*)" because it is hidden$/'
  features/profile.feature:10:in `And I should not see "#step2" because it is hidden'
page.find调用似乎工作正常。如果我打印出我得到的对象

#<Capybara::Node::Element:0x007fd42ea30818>
#
我试过各种各样的咒语,但都没有用。这似乎是最直接的。有人看到这个问题了吗?这把我难住了

期望(s.可见?)。不等于(真)


这似乎奏效了

使用RSpec提供的动态谓词匹配器可以更好地读取和提供更好的错误消息

expect(s).not_to be_visible

注意-如果您将默认机架测试驱动程序与Capybara一起使用,则它不会处理大多数“外部”CSS,因此除非显示:元素样式属性中没有任何元素,否则它将无法确定可见性。如果您正在验证元素在页面上不可见,则可以使用下面提到的方法

Then /^I should not see "([^\"]*)" because it is hidden$/ do |id|
  expect(page).to have_selector(<SELECTOR>,:visible => false)
end
Then/^我不应该看到“([^\“]*)”,因为它是隐藏的$/do | id|
期望(第页).具有_选择器(,:visible=>false)
结束
或者你也可以像这样做

Then /^I should not see "([^\"]*)" because it is hidden$/ do |id|
  page.find(<SELECTOR>, :visible => false)
end
Then/^我不应该看到“([^\“]*)”,因为它是隐藏的$/do | id|
page.find(,:visible=>false)
结束
注意:
是元素的css选择器


希望这有帮助:)

试试
expect(s.visible?)。说实话
。你用水豚做这些测试的驱动程序是什么?告诉你我是多么的新手。我不知道司机是什么。你怎么确定?你试过我的吗?我所说的会起作用,因为你的期望是错误的。是的,我试过了,但对我不起作用。不知道为什么。