我正在尝试使用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!被添加到 节点(不是元素),但找到返回元素
你有什么想法来解决这个要点,或其他解决方案来提交没有按钮的表格吗?
由于
答案 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'