水豚无法找到文件输入
Capybara unable to find file input
为什么 Capybara (2.8.0) 无法找到我的文件输入? (如果我从调试器检查 page.body
,则输入存在。)
And(/^if I add a large image$/) do
within all('.title').first do
attach_file('.file-input', test_file)
end
end
# Cucumber error message
And if I add a large image # features/step_definitions/story_steps.rb:466
Unable to find file field ".file-input" (Capybara::ElementNotFound)
./features/step_definitions/story_steps.rb:468:in `block (2 levels) in <top (required)>'
./features/step_definitions/story_steps.rb:467:in `/^if I add a large image$/'
features/long_form_features.feature:450:in `And if I add a large image'
编辑:我可以使用 ID (attach_file 'file_input', test_file
) 找到输入,但我真的不想为了让这个测试工作而必须将 ID 添加到我的所有输入中。有什么方法可以将现有的 类 与 Capybara 结合使用吗?
很可能实际的文件输入元素在页面上被隐藏了。通常这样做是为了允许跨多个平台对文件输入进行相同的样式设置。使用 #execute_script
删除输入中的任何 CSS 使其在页面上不可见,然后对其调用 #attach_file
。
更新:我没有注意到您试图使用 class 来定位字段。因为 documented #attach_file
采用元素名称、id 或关联标签的文本来查找元素,而不是 css 选择器。如果你真的需要通过 class 查找,并且必须停留在你使用的 Capybara 版本上,你可以这样做
find('.file-input').set(test_file)
或者如果您更新到 Capybara 2.10+,您应该可以做到
attach_file(test_file, class: 'file-input')
此外,within all('.title').first
可以只是 within first('.title')
,尽管如果需要,它们都不会实际等待元素出现在页面上,您最好将其写为 within first('.title', minimum: 1)
为什么 Capybara (2.8.0) 无法找到我的文件输入? (如果我从调试器检查 page.body
,则输入存在。)
And(/^if I add a large image$/) do
within all('.title').first do
attach_file('.file-input', test_file)
end
end
# Cucumber error message
And if I add a large image # features/step_definitions/story_steps.rb:466
Unable to find file field ".file-input" (Capybara::ElementNotFound)
./features/step_definitions/story_steps.rb:468:in `block (2 levels) in <top (required)>'
./features/step_definitions/story_steps.rb:467:in `/^if I add a large image$/'
features/long_form_features.feature:450:in `And if I add a large image'
编辑:我可以使用 ID (attach_file 'file_input', test_file
) 找到输入,但我真的不想为了让这个测试工作而必须将 ID 添加到我的所有输入中。有什么方法可以将现有的 类 与 Capybara 结合使用吗?
很可能实际的文件输入元素在页面上被隐藏了。通常这样做是为了允许跨多个平台对文件输入进行相同的样式设置。使用 #execute_script
删除输入中的任何 CSS 使其在页面上不可见,然后对其调用 #attach_file
。
更新:我没有注意到您试图使用 class 来定位字段。因为 documented #attach_file
采用元素名称、id 或关联标签的文本来查找元素,而不是 css 选择器。如果你真的需要通过 class 查找,并且必须停留在你使用的 Capybara 版本上,你可以这样做
find('.file-input').set(test_file)
或者如果您更新到 Capybara 2.10+,您应该可以做到
attach_file(test_file, class: 'file-input')
此外,within all('.title').first
可以只是 within first('.title')
,尽管如果需要,它们都不会实际等待元素出现在页面上,您最好将其写为 within first('.title', minimum: 1)