Notice: Undefined index: in /data/phpspider/phplib/misc.function.php on line 226
Selenium webdriver 找不到带有Capybara的复选框_Selenium Webdriver_Checkbox_Capybara_Visibility - Fatal编程技术网

Selenium webdriver 找不到带有Capybara的复选框

Selenium webdriver 找不到带有Capybara的复选框,selenium-webdriver,checkbox,capybara,visibility,Selenium Webdriver,Checkbox,Capybara,Visibility,无法找到带有水豚的复选框 这是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="

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

这是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>

但是复选框上面的两个类,“.check group”和“.checkbox”被找到,只是没有找到复选框。想法?

想出办法,试着:

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

它工作了,元素是“不可见”的,所以只需将其与查找一起传递,然后单击它就可以工作。

可见:false解决方案对我不起作用

这是因为复选框是隐藏的,就像这样

 input[type="checkbox"]{
    position: absolute;
    opacity: 0;
    cursor: pointer;
    height: 0;
    width: 0;
    opacity:0;
}
取而代之的是一种时髦的复选标记风格

然而,点击标签对我来说很有效

例如/


page.find(:xpath,“//label[@for='accepts_fcra'])。单击

如果这是用于测试应用程序,则不建议与不可见元素交互。此外,并非所有的水豚司机都会点击一个不可见的元素,因此你的测试是针对司机的,将来当你使用的司机切换到不点击不可见的元素时,测试可能会中断。相反,您应该执行用户将执行的任何操作,可以单击标签-
find('label[for=“accepts_fcra”]”)。单击instance@Tom,尝试了您的方法,但无效,它实际上单击了文本/标签中单选按钮的链接。但是复选框对用户来说并不是不可见的,我可以看到它,所以在这种情况下我认为它应该是可以的,如果实际元素实际上是不可见的,我认为你的观点更有意义。如果水豚说它不可见,我敢打赌,你在屏幕上看到的并不是复选框——更可能是(通过JS/CSS)在多个浏览器中使用图像来设置相同的复选框样式。因为上面的HTML没有在标签中显示无法预测的链接:)你真的应该从live页面查看HTML(在JS小部件运行之后)并找出用户将单击的实际元素,而不是让Capybara单击不可见元素-您当前编写的测试将停止作为驱动程序更新HMM…从HTML中,单击复选框唯一有意义的是:确定-因此,当尝试单击标签时-它会单击标签边界框的中间-在您的示例中,它表示链接。不幸的是,标签中没有任何其他内容是可单独查找的(例如,如果“某些文本”在其自己的范围内,您可以找到并单击它),这意味着在这种情况下,您可能无法以跨驱动程序的方式执行任何操作。
 input[type="checkbox"]{
    position: absolute;
    opacity: 0;
    cursor: pointer;
    height: 0;
    width: 0;
    opacity:0;
}