Ale*_* DS 26 testing bdd rspec ruby-on-rails 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
Run Code Online (Sandbox Code Playgroud)
https://gist.github.com/989533,但我没有让它工作,我对它发表了评论:
我得到未定义的方法`submit_form!' for #Capybara :: Node :: Element:...实际上是通过"Capybara :: RackTest :: Node.send:include,SubmitRackTestFormWithoutButton"方法submit_form!添加到节点(而不是元素),但找到返回元素
您是否有一些想法可以解决这个问题,或者其他一些解决方案来提交没有按钮的表单?
谢谢
小智 24
你的所有生产代码都应该是可测试的,所以如果你添加一个仅供测试使用的代码而不是测试就没有意义......
尝试这样做:
page.execute_script("$('form#your-form').submit()")
Run Code Online (Sandbox Code Playgroud)
这是一个简单的解决方案,不需要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
Run Code Online (Sandbox Code Playgroud)
然后你可以做类似的事情
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
Run Code Online (Sandbox Code Playgroud)
这有点像雅各布在这里的答案,但对于他来说,你必须在测试中定义它.
对于此解决方案,您可以在/ support目录中的某个文件中或在该规范的开头等处定义此项.它可以减少测试中的混乱.
您可以通过在输入中按 Enter 来执行此操作
find('form input').native.send_keys :enter
Run Code Online (Sandbox Code Playgroud)
虽然使用水豚可以实现您想要的效果,但更简单、更实用的解决方案是在表单上放置一个提交按钮。
表单上没有理由没有按钮,没有表单的可访问性很差,没有 GUI 或使用屏幕阅读器的用户将无法提交表单。
如果您不希望表单按钮可见,我可以建议使用一些 CSS 将其隐藏:
<input type="submit" style="position: absolute; left: -9999px; width: 1px; height: 1px;">
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17401 次 |
| 最近记录: |