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! 添加到节点(而不是元素),但找到返回元素

您是否有一些想法可以解决这个问题,或者其他解决方案来提交没有按钮的表单?

谢谢

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

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

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

  

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

尝试这样做:

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

这是一个简单的解决方案,不需要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 

这有点像雅各布在这里的回答,但对于他来说,你必须在测试中定义它。

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

我让它在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

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

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

现在你应该使用click_on

 click_on 'Sign up'