单击不幸包含链接的标签元素

时间:2015-06-09 16:15:54

标签: selenium rspec capybara

我遇到了一个问题,我试图点击一个复选框。该应用程序是用AngularJS编写的。

无法单击该复选框,因为从技术上讲,该元素不可见。使用'visible:false'无助于检查此框。我也试过使用element.set(true)

复选框位于标签元素中,恰好也包含超链接。由于Capybara / Selenium默认点击元素的中间,我最终打开超链接而不是标记复选框。单击标签中的任何位置(超链接之外)都会成功检查该框。

我怎样才能做到这一点?

3 个答案:

答案 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