我有一个使用 Cucumber 和 Capybara 进行测试的 Rails 项目。我有一个使用 Dropzone.js 的文件上传页面。
我的上传使用对话框或拖放效果很好。测试是另一回事。
我的表单中有以下字段:
<input id="photo_image" multiple="multiple" name="image" type="hidden">
但是,在步骤定义中,我尝试了几种查找和附加文件数据的方法,但没有一个起作用。
我尝试过填写:
fill_in "photo_image", with: photo
我尝试使用 css 选择器查找:
find('#photo_image').set photo
我尝试使用 xpath 查找:
find(:xpath, "//input[@id='photo_image']").set photo
但他们都没有看到隐藏字段。
Unable to find css "#photo_image" (Capybara::ElementNotFound)
Unable to find xpath "//input[@id='photo_image']" (Capybara::ElementNotFound)
Unable to find field "photo_image" (Capybara::ElementNotFound)
是否有任何测试方法可以使用 Dropzone.js 处理上传,还是没有希望?
水豚2.1默认情况下不查找隐藏元素 https://github.com/jnicklas/capybara/blob/master/lib/capybara.rb#L329.
您可以设置ignore_hidden_elements
为假:
Capybara.ignore_hidden_elements = false
or add :visible
您的方法的选项:
attach_file('photo_image', path_to_file, visible: false)
我更喜欢第二种变体,因为在大多数情况下,测试中找到的元素都是可见的,如果其中之一被隐藏,最好让 Capybara 抛出异常。
Note: :visible
大多数内部使用的 Capybara 方法也支持选项Capybara::Query
(like find
, all
, has_css?
, have_selector
etc.)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)