我使用capybara点击一个复选框,但无论我做什么,它似乎都找不到它.我能够正确地找到跨度内的跨度和标签,但不能找到我实际需要的输入.
这是复选框
以下是我尝试过的一些事情
page.check('agreement') find(:css, '#agreement').set(true) find('#agreement').set(true) find('#agreement').click
但是,他们都给了我同样的错误
Unable to find css "#agreement" (Capybara::ElementNotFound)
我也想知道onclick
当单击复选框时,这些方法中的任何一个都会触发该方法吗?我觉得find(:css, '#agreement').set(true)
不会触发onclick
事件.但是,我不确定其余的事情.
更新
我也试过通过xpath选择元素.以下是我发现的各种事情
find(:xpath, '//*[@id="registration"]/span[2]')
这样就可以找到span
没有问题的元素
find(:xpath, '//*[@id="registration"]/span[2]/input')
这找不到我需要的元素,但是这个xpath正确地选择了chrome控制台中的元素
find(:xpath, '//*[@id="agreement"]')
这找不到我需要的元素,但xpath选择chrome控制台中的元素
find(:xpath, '//*[@id="registration"]/span[2]/label')
这样就可以label
在span
没有问题的情况下找到元素.
我昨天遇到了确切的问题.由于它不可见,Capybara自动忽略了输入.我解决了以下问题:
find('#agreement', :visible => false).click
您还可以将以下内容添加到env.rb,以使Capybara能够与所有隐藏元素进行交互:
Capybara.ignore_hidden_elements = false
尝试将:visible
选项设置为false.
find('#agreement', visible: false).click
默认情况下,Capybara仅查找可见元素.似乎潜在的驱动程序将此输入识别为不可见,因此Capybara尚未找到它.
:visible
选项也由多数的其它水豚方法支持(如check
,has_css?
,have_selector
等等)