我想在 rspec 中测试是否存在提交按钮。我也在使用水豚。
我试过了:
should have_tag("input","Submit button")
和
should have_content("Submit, button")
但它要么引发异常,要么给出误报。
这些都是很好的建议,但是如果你想确认它是一个按钮并且它具有正确的值(用于显示),你必须更详细一点:
page.should have_selector("input[type=submit][value='Press Me']")
我不知道现有的匹配器可以做到这一点。这是我编写的自定义 RSpec2 匹配器:
RSpec::Matchers.define :have_submit_button do |value|
match do |actual|
actual.should have_selector("input[type=submit][value='#{value}']")
end
end
这是 RSpec3 版本(@zwippie 提供):
RSpec::Matchers.define :have_submit_button do |value|
match do |actual|
expect(actual).to have_selector("input[type=submit][value='#{value}']")
end
end
我把它spec/support/matchers/request_matchers.rb
和我的其他自定义匹配器放在一起。RSpec 会自动拾取它。由于这是一个 RSpec 匹配器(而不是 Capybara 查找器),它可以在功能规范(Capybara)和视图规范(没有 Capybara 的 RSpec)中工作。
功能规格用法:
page.should have_submit_button("Save Me")
查看规范使用情况(调用后render
):
rendered.should have_submit_button("Save Me")
请注意,如果您在 Capybara 请求规范中,并且想与提交按钮进行交互,那会容易得多:
click_button "Save Me"
不能保证它实际上是一个提交按钮,但您的功能规范应该只是测试行为,而不是担心细节级别。
有一个内置的匹配器has_button?.
使用 RSpec 你可以有一个断言
page.should have_button('Submit button')
或者使用新的 RSpec 3 语法:
expect(page).to have_button('Submit button')
我有一个(用于黄瓜):
Then /^I should see "([^"]*)" button/ do |name|
should have_button name
end
负面使用:have_no_button
如果您的 HTML 标记类似于:
<input type="submit"></input>
然后你可以在 capybara 中执行以下操作:
page.should have_selector('input[type=submit]')
我有类似的东西:
page.find("#submitButton").visible?
试试这个
it { should have_xpath("//input[@value='Sign up']") }
尝试:
it { should have_selector('input', value: "Submit") }
更新:我怀疑这个答案在某些情况下可能无法正常工作。当我使用它来测试其他输入标签中的值时,无论该值是什么,它似乎都通过了。