我遇到了一个问题,我试图点击一个复选框。该应用程序是用AngularJS编写的。
无法单击该复选框,因为从技术上讲,该元素不可见。使用'visible:false'无助于检查此框。我也试过使用element.set(true)
复选框位于标签元素中,恰好也包含超链接。由于Capybara / Selenium默认点击元素的中间,我最终打开超链接而不是标记复选框。单击标签中的任何位置(超链接之外)都会成功检查该框。
我怎样才能做到这一点?
答案 0 :(得分:2)
我建议使用JavascriptExecutor单击元素。如果元素在技术上不可见,Webdriver将不允许您使用API单击它,因为它试图模拟真实的用户操作。不过你可以选择直接执行JS,这并不是真正关心的。
这个答案将帮助您使用代码部分: https://stackoverflow.com/a/19934852/2998104
您需要稍微更改结尾:
JavascriptExecutor js = (JavascriptExecutor) driver;
WebElement element = driver.findElement(By.xpath("exact_locator_of_checkbox"));
js.executeScript("arguments[0].click()",element);
当然不需要只使用xpath,而是任何可以帮助你直接指向复选框的内容。
答案 1 :(得分:1)
我花了一点时间,但我发现我可以避免使用Capybara API并使用WebDriver的ActionBuilder。
def agree
source = find('label.terms-label').native
actionbuilder = page.driver.browser.action
actionbuilder.move_to(source, 0, 0).click.perform
end
默认情况下,Capybara API(以及其他本机Selenium方法)将单击元素的中心。这将避免这种情况,并将找到该元素并在(0,0)坐标处单击它。
答案 2 :(得分:1)
从Capybara 3.0.0开始,在元素上调用click
时可以指定偏移量。因此,如果您想单击元素框的左上角,则会说:
find('label.terms-label').click(x: 0, y: 0)
(请注意,您必须指定:x
和:y