17

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

我试过了:

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

should have_content("Submit, button")

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

4

7 回答 7

37

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

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"

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

于 2013-03-17T17:11:03.483 回答
17

有一个内置的匹配器has_button?.

使用 RSpec 你可以有一个断言

page.should have_button('Submit button')

或者使用新的 RSpec 3 语法:

expect(page).to have_button('Submit button')
于 2015-02-17T09:29:11.473 回答
2

我有一个(用于黄瓜):

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

负面使用:have_no_button

于 2013-12-30T20:57:17.257 回答
1

如果您的 HTML 标记类似于:

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

然后你可以在 capybara 中执行以下操作:

page.should have_selector('input[type=submit]')
于 2012-09-27T20:52:13.553 回答
0

我有类似的东西:

page.find("#submitButton").visible?
于 2012-09-24T22:14:25.633 回答
0

试试这个

it { should have_xpath("//input[@value='Sign up']") }
于 2016-04-03T13:17:19.597 回答
-1

尝试:

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

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

于 2012-09-24T22:43:05.153 回答