你怎么测试,如果一个div在rspec的/水豚一定的CSS样式?(How do you test i

2019-06-25 18:34发布

你怎么测试,如果div标签具有一定的CSS样式? 我想,以测试它是否有display:none;display:block

我尝试以下,但它给我的错误:

it {should have_selector('signup_server_generic_errors', /display:\s*none/)}

Answer 1:

我建议,而不是试图找到css样式,而不是你写你的测试,以找到CSS类名

这样,在保持类一样,你可以改变底层CSS样式和你的测试仍然会通过。

搜索潜在的风格是脆。 风格经常改变。 在查找特定风格元素立足您rspecs让你的测试更脆弱 - 他们将更有可能时,所有你要做的就是改变一个div的外观和感觉失败。

在寻找CSS类立足您的测试,使测试更加健壮。 这使他们能保证你的代码是否正常工作,而不是要求您,当您更改页面样式改变它们。

在这种情况下具体地,一种选择可以是定义一个CSS类名为.hidden ,其设定display:none; 一个元素将其隐藏。

像这样:

CSS:

.hidden {
  display:none;
}

HTML:

<div class="hidden">HIDE ME!</div>

水豚:

it {should have_css('div.hidden') }

这水豚只是寻找具有一个div hidden类-你可以使这个匹配,如果你需要更复杂的。

但主要的问题是这样的 - 连接样式CSS类名,再配合你的测试类,而不是风格。



Answer 2:

你可以使用has_css? 匹配器。 它可以接受:visible选项。 欲了解更多详情,您可以检查文档: http://rdoc.info/github/jnicklas/capybara/Capybara/Node/Matchers#has_css%3F-instance_method

例如,你可以试试:

it { should have_css('div.with-some-class', :visible => true) }



Answer 3:

我的方法,以确保该元素具有一定的阶级:

let(:action_items) { page.find('div.action_items') }

it "action items displayed as buttons" do
  action_items.all(:css, 'a').each do |ai|
    expect(ai[:class]).to match(/btn/)
  end
end

或smthing这样

expect(ai[:style]).to match(/color: red/)

我在这里找到: http://rubydoc.info/github/jnicklas/capybara/Capybara/Node/Element#%5B%5D-instance_method



文章来源: How do you test if a div has a certain css style in rspec/capybara?