【问题标题】:Clicking label element that unfortunately contains a link单击不幸包含链接的标签元素
【发布时间】:2015-08-24 14:16:56
【问题描述】:

我在尝试单击复选框时遇到了问题。该应用程序是用 AngularJS 编写的。

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

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

我怎样才能做到这一点?

【问题讨论】:

    标签: selenium rspec capybara


    【解决方案1】:

    我会推荐使用 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,而是任何可以帮助你直接指向复选框的东西。

    【讨论】:

      【解决方案2】:

      我花了一点时间,但我发现我可以避免使用 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) 坐标处单击它。

      【讨论】:

        【解决方案3】:

        从 Capybara 3.0.0 开始,您可以在对元素调用 click 时指定偏移量。所以如果你想点击元素框的左上角,你会说:

        find('label.terms-label').click(x: 0, y: 0)

        (注意,如果您指定了:x:y,则必须指定)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-30
          • 1970-01-01
          • 2010-09-23
          • 2011-07-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多