2016-03-08 30 views
1

无法找到带有水豚的复选框。无法找到带有水豚的复选框

这是HTML:

<div class='check-group'> 
<div class='checkbox'> 
    <input type="checkbox" name="accepts_fcra" id="accepts_fcra" value="1" /> 
    <label for="accepts_fcra"><span>Some text <a title="FCRA" target="_blank" href="https://www.google.com/fcra">FCRA</a> some text.</span></label> 
</div> 
</div> 

现在我要检查id为 “accepts_fcra” 复选框。

我已经尝试了一堆东西,都几乎回到同一件事:“无法找到(方法用于查找复选框)”

一些尝试:

check("#accepts_fcra") 
Capybara::ElementNotFound: Unable to find checkbox "#accepts_fcra" 

find("#accepts_fcra").set true 
Capybara::ElementNotFound: Unable to find css "#accepts_fcra" 

within("div.checkbox") do 
    find(:xpath, "//input[@id='accepts_fcra']") 
end 
Capybara::ElementNotFound: Unable to find xpath "//input[@id='accepts_fcra']" 

但2复选框上方的类“.check-group”和“.checkbox”已找到,但未找到复选框。思考?

回答

2

想通了,想这:

find("accepts_fcra", :visible => false).click 

和它的工作,该元素是“看不见的”,所以才不得不通过在与查找和点击为它工作。

+1

如果这是测试应用程序,不建议与不可见元素进行交互。此外,不是所有的Capybaras驱动程序都会点击一个不可见的元素,以便您的测试成为驱动程序特定的,并且在您使用的任何驱动程序切换为不点击不可见元素时,未来可能会中断测试。相反,你应该执行用户会执行的任何操作,也许点击标签 - 'find('label [for =“accepte_fcra”]')。点击'例如 –

+0

@Tom,尝试了你的方法,但它不起作用,它实际上点击了单选按钮的文本/标签内的链接。 但是复选框实际上对用户不可见,我可以在物理上看到它,所以在这种情况下,我认为它应该没问题,如果实际元素实际上不可见,我认为您的观点更有意义。 – Farooq

+0

如果Capybara说它不可见,我敢打赌,你在屏幕上看到的实际上并不是复选框 - 它更可能是使用图像(通过JS/CSS)来复选多个复选框浏览器。既然你是上面的HTML,不会在标签中显示一个无法预测的链接:)你真的应该从实况页面(在JS小部件运行之后)看HTML,并且弄清楚用户会是什么样的实际元素点击而不是让水豚点击不可见的元素 - 当前写入的测试将停止工作,因为驱动程序更新 –