【发布时间】:2013-06-26 00:42:34
【问题描述】:
我使用以下 html 堆栈创建了自定义上传表单:
<form>
<label></label>
<input type="file">
</form>
文件字段通过 display: none 属性通过 css 隐藏。因此,当用户单击标签(自定义样式)时,用户会调用文件附加对话框。
在我的功能测试中,由于输入字段被隐藏,我无法附加文件。我尝试了几种可能的解决方案,但它们都不起作用:
find(:xpath, '//input', visible: false).set(some_file_path)
或
within('form') do
attach_file(:input, some_file_path, visible: false)
end
还有很多其他的。一直以来,我都会遇到 Failed to click element at unknown position 错误。一旦我删除了与输入字段重叠的标签,使其可见并运行我的规范,一切都通过了。所以这里的问题是:
- 输入文件字段具有
display: none属性(因此无法找到) - 有一个标签与隐藏文件字段重叠(可能)
有没有什么办法可以让 Capybara 和 Capybara-webkit 驱动程序以某种理智的方式处理这种微妙的情况?
【问题讨论】:
-
您能否展示您使用的样式标签的 CSS/JS,以便我可以重现此问题?
-
这真的没有什么花哨的东西,只是普通的东西——jsfiddle.net/QUc4M/2(顺便说一句,它是自定义文件上传字段的一个干净完整的解决方案:-)
-
AFAIK 您无法将文件附加到 Selenium 中的不可见输入 - 请参阅 this section。我认为您应该在附加文件之前使文件输入可见。
-
好在我没有使用 Selenium。
-
我不确定这里发生了什么,但我注意到了两件事:(1)你没有关闭你的输入标签。不知道这对水豚是否重要。 (2) 在您的 jsFiddle 中,当我单击标签时(在 Firefox 22.0 中),文件对话框会打开两次。在第一个对话框上单击取消后,第二个对话框打开。
标签: ruby-on-rails capybara capybara-webkit poltergeist