【问题标题】:Test if an element is focused using Selenium Webdriver使用 Selenium Webdriver 测试元素是否聚焦
【发布时间】:2021-09-11 20:42:09
【问题描述】:

我真的很惊讶我在互联网上找不到使用 Selenium Webdriver 测试元素焦点的参考资料。

我想检查何时尝试提交表单而错过了必填字段,焦点移至空字段。但我看不到任何使用 WebDriver API 的方法。

我将能够使用JavascriptExecutor 找到焦点元素。但是阅读FAQ 让我觉得一定有某种方法可以使用驱动程序本身来执行检查。

感谢您的帮助。

【问题讨论】:

    标签: c# selenium webdriver selenium-webdriver


    【解决方案1】:

    driver.switchTo().activeElement() 将返回当前关注的WebElementWebElement 定义了平等,因此您可以调用 element.equals(driver.switchTo().activeElement())

    调用driver.switchTo().activeElement()这个有点误导人的名字其实并不会切换焦点,driver.findElement()也不会,所以后面不需要switchTo().defaultContent();事实上,这样做可能会模糊当前元素。

    【讨论】:

    • 我有一个 id="widget_113_signup_username" 的文本字段。我想验证焦点是否在该领域。我编写了以下代码来执行此操作。如果光标不存在,则 bb = false,否则 bb= true。我对吗?我的代码可以吗? boolean bb = driver.switchTo().activeElement().equals(driver.findElement(By.id("widget_113_signup_username")));
    【解决方案2】:
    driver.switchTo().activeElement();
    

    返回当前焦点元素。

    确保在使用后切换回来

    driver.switchTo().defaultContent();
    

    此外,如果没有关注焦点,则返回文档的 body

    也看看这个问题。

    In Selenium how do I find the "Current" object

    【讨论】:

    • 丹尼尔的回答说switchTo().defaultContent()不正确。
    【解决方案3】:

    您可以使用选择器“dom=document.activeElement”找到活动元素。然后你可以断言它是否是你希望它被聚焦的元素。

    【讨论】:

      【解决方案4】:

      当您使用Driver.FindElement 调用时,WebDriver 应该会改变焦点。所以你在 Driver 上下文中的最后一个元素是活动的。

      注意:这会破坏任何动态注入的元素(例如 jQuery),因此您需要执行脚本路由。

      【讨论】:

        【解决方案5】:

        @danielwagner-hall boolean bb = driver.switchTo().activeElement().equals(driver.findElement(By.id("widget_113_si‌​gnup_username"))); 将始终通过,但如果元素不在视线范围内,它并不能证明该元素已成为焦点。

        注意:由于声誉点数不足,无法发表评论。

        解决此问题的一种方法是使用 webElement.getLocation().getX(); getY() 方法并引用页面上的坐标并验证其焦点。

        【讨论】:

          猜你喜欢
          • 2011-12-20
          • 1970-01-01
          • 2015-08-17
          • 2012-06-11
          • 1970-01-01
          • 1970-01-01
          • 2013-10-30
          • 1970-01-01
          相关资源
          最近更新 更多