如何测试水豚中是否存在提交按钮?

时间:2012-09-24 21:59:17

标签: ruby rspec capybara

我想在rspec中测试是否存在提交按钮。我也在使用水豚。

我试过了:

should have_tag("input","Submit button")

should have_content("Submit, button")

但它要么引发异常,要么给出误报。

7 个答案:

答案 0 :(得分:33)

这些都是很好的建议,但是如果你想确认它是一个按钮并且它具有正确的值(用于显示),你必须更加详细:

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 finder),它可以在功能规格(Capybara)和视图规格(没有Capybara的RSpec)中工作。

功能规格用法:

page.should have_submit_button("Save Me")

查看规范用法(在调用render后):

rendered.should have_submit_button("Save Me")

请注意,如果您使用的是Capybara请求规范,并且想要与提交按钮进行交互,那么这就容易多了:

click_button "Save Me"

无法保证它实际上是一个提交按钮,但您的功能规格应该只是测试行为,而不是担心这个细节级别。

答案 1 :(得分:15)

内置匹配器has_button?

使用RSpec你可以有一个像

这样的断言
page.should have_button('Submit button')

或使用新的RSpec 3语法:

expect(page).to have_button('Submit button')

答案 2 :(得分:2)

我有一个(用于黄瓜):

Then /^I should see "([^"]*)" button/ do |name|
  should have_button name
end

否定用法:have_no_button

答案 3 :(得分:1)

如果您的HTML标记类似于:

<input type="submit"></input>

然后你可以在水豚中做到以下几点:

page.should have_selector('input[type=submit]')

答案 4 :(得分:0)

我有类似的东西:

page.find("#submitButton").visible?

答案 5 :(得分:0)

试试这个

it { should have_xpath("//input[@value='Sign up']") }

答案 6 :(得分:-1)

尝试:

it { should have_selector('input', value: "Submit") }

更新:我怀疑在某些情况下这个答案可能无法正常工作。当我使用它来测试其他输入标签中的值时,无论值是什么,它似乎都会通过。