【问题标题】:Use Selenium to find all "hoverable" elements on a webpage使用 Selenium 查找网页上的所有“可悬停”元素
【发布时间】:2013-06-13 00:49:10
【问题描述】:

有没有什么方法可以使用 Selenium 来查找所有在鼠标悬停时会以某种方式改变页面的元素? (例如触发下拉菜单、工具提示文本,或者只是简单地更改链接颜色)

我能想到的唯一方法是在页面加载后立即截取基线屏幕截图,然后循环浏览页面上的每个元素,将鼠标悬停在它上面,然后再截取另一个屏幕截图与基线进行比较。

编辑:您基本上是在寻找具有 :hover CSS 属性或 onMouseOver javascript 事件的所有元素,但由于 HTML 中通常不提供该信息,因此我不确定 XPath 是否有帮助。

【问题讨论】:

  • Selenium 不支持 CSS 选择器,甚至使用 Sizzle 作为后备?
  • 有没有办法在不知道元素类名的情况下使用 CSS 选择器获取所有具有 :hover 选择器的元素?
  • 我不知道。那将是元选择器,不是吗?你不能添加一个类hoverable或类似的吗?
  • 我正在尝试制作一个可以在任何网页上运行的自动化解决方案,所以我假设我自己没有编写任何 CSS。

标签: java javascript selenium selenium-webdriver


【解决方案1】:

我问自己the same question,我得出的结论(因为我不太了解 Web 开发)是我最好的选择是修改 Visual Event 2 以从网页中获取所有 Javascript 事件。它有点工作,我没有得到任何其他答案,所以我认为这是唯一的方法。如果您希望我分享我的代码,请告诉我,因为找到一个应该修改 Visual Event 2 的确切位置以便您可以访问他们的事件对象有点​​棘手。

【讨论】:

    【解决方案2】:

    这是您问题的部分解决方案,因为我不知道基于 css 悬停属性进行选择的方法(除了为悬停样式设置类名):

      WebDriver driver = new FirefoxDriver();
        driver.navigate().to("http://yourdomain.com/page.html");
        List<WebElement> mouseoverElements = driver.findElements(By.xpath("//*[@onmouseover]"));
        System.out.println("Number of elements with a mouseover attribute: " + mouseoverElements.size());
        for (WebElement e : mouseoverElements) {
          System.out.println(e.getTagName() + ": " + e.toString());
        }
    

    【讨论】:

      猜你喜欢
      • 2013-11-10
      • 2023-04-01
      • 1970-01-01
      • 2021-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-15
      • 1970-01-01
      相关资源
      最近更新 更多