Capybara - 提交没有按钮的表格

时间:2012-01-06 11:58:13

标签: ruby-on-rails testing rspec bdd capybara

我正在尝试使用Capybara和Rspec提交没有按钮的表单(没有Cucumber或Selenium,我知道已经有一个问题了。)

我已经看到有一个要点是添加一个方法来提交没有按钮的表单:

module SubmitRackTestFormWithoutButton
  def submit_form!
    Capybara::RackTest::Form.new(driver, form).submit({})
  end
end
Capybara::RackTest::Node.send :include, SubmitRackTestFormWithoutButton

https://gist.github.com/989533,但我还没有开始工作,我就此发表了评论:

  

我得到未定义的方法`submit_form!' for #Capybara :: Node :: Element:...   实际上是“Capybara :: RackTest :: Node.send:include,   SubmitRackTestFormWithoutButton“方法submit_form!被添加到   节点(不是元素),但找到返回元素

你有什么想法来解决这个要点,或其他解决方案来提交没有按钮的表格吗?

由于

6 个答案:

答案 0 :(得分:23)

您的所有生产代码都应该是可测试的,因此如果您添加的代码仅供测试使用而不是测试就没有意义......

尝试改为:

page.execute_script("$('form#your-form').submit()")

答案 1 :(得分:9)

这是一个简单的解决方案,不需要capybary-webkit,qt,lmnop等等。

不需要提交按钮。人们说你需要它,无论如何。

只是monkeypatch一两个类

# /spec/support/capybara.rb
  class Capybara::Session
    def submit(element)
      Capybara::RackTest::Form.new(driver, element.native).submit({})
    end
  end

然后你可以做类似

的事情
require 'support/capybara'

before do
  create :lead
  create :user, :different_email
end

it 'Searchable' do
  visit users_path
  page.should have_content 'Slicer'
  page.should have_content 'Dicer'

  fill_in 'Search', with: 'dice'

  form = find '#search-form' # find the form
  page.submit form           # use the new .submit method, pass form as the argument

  page.should have_content 'Dicer'
  page.should_not have_content 'Slicer'
end

它有点像jacob在这里的答案,但是对于他来说,你必须在测试过程中定义它。

对于此解决方案,您可以在/ support目录中的某个文件中或在该规范的开头等处定义它。它可以减少测试中的混乱。

答案 2 :(得分:3)

我让它在capybara 1.1.2中工作:

  form = page.find("form")
  class << form
    def submit!
      Capybara::RackTest::Form.new(driver, native).submit({})
    end
  end
  form.submit!

这里描述了类似的解决方案:http://minimul.com/submitting-a-form-without-a-button-using-capybara.html

答案 3 :(得分:3)

您可以通过在输入中按Enter键来执行此操作

find('form input').native.send_keys :enter

答案 4 :(得分:1)

尽管使用水豚可以达到你想要的效果,但更简单,更实用的解决方案是在表格上放置一个提交按钮。

没有理由在表单上没有按钮,没有表单是不可访问的,没有GUI或使用屏幕阅读器的用户将无法提交表单。

如果您不希望表单按钮可见,我是否可以建议使用一些CSS来隐藏它:

<input type="submit" style="position: absolute; left: -9999px; width: 1px; height: 1px;">

答案 5 :(得分:1)

现在你应该使用click_on

click_on 'Sign up'