java - Selenium Webdriver 的鼠标悬停功能不适用于 Opera 39,并且与 Chrome 53 的工作不一致

标签 java google-chrome selenium mouseover opera

我正在尝试编写 Webdriver 测试,我需要将鼠标光标悬停在某个元素上以触发下拉菜单,然后单击下拉菜单中的按钮。我一直在按照 How to perform mouseover function in Selenium WebDriver using Java? 的建议编写代码。 。例如,我的代码可能如下所示:

Actions action = new Actions(webdriver);
WebElement hoverElem = webdriver.findElement(By.xpath("//html/body/div[13]/ul/li[4]/a"));
WebElement clickElem = webdriver.findElement(By.xpath("//html/body/div[3]/li[12]/a"));
action.moveToElement(hoverElem).moveToElement(clickElem).click().build().perform();

我的代码在 Firefox 中测试时运行完美,但在 Chrome 中却不一致;有时它会完美地工作,然后下次运行测试时它会失败。在 Opera 中它永远不会起作用。当代码失败时,下拉菜单看起来会在屏幕上出现一瞬间,然后在 WebDriver 单击下拉菜单上的按钮之前消失。我不知道如何解决这个问题。我如何才能使其适用于所有 3 个浏览器?

作为引用,我使用 selenium-2.53.0、Chrome 53.0.2785.101 64 位和 Opera 39.0.2256.71 64 位。

最佳答案

如果将来有人发现这一点并且对为什么鼠标悬停功能与 Chrome、Opera 或 Internet Explorer 的工作不一致感到困惑,原因如下:

我上面的代码是正确的。问题是,无论出于何种原因,如果在测试运行时鼠标光标位于浏览器窗口上,则 Chrome、Opera 和 IE 上的鼠标悬停不起作用(这可能是每个浏览器的驱动程序中的问题) .

为了解决这个问题,您需要确保在运行测试时鼠标光标位于浏览器窗口之外。我通过在最大化浏览器窗口时在屏幕底部留下一两个像素的空间来做到这一点,然后使用 java.awt.Robot 类将鼠标光标移动到鼠标不会干扰的屏幕底部与测试。

下面是我的显示器的示例(分辨率为 1680 x 1050,因此我在屏幕底部留了 40 像素的空间):

    driver.manage().window().setPosition(new Point(0, 0));
    org.openqa.selenium.Dimension d = new org.openqa.selenium.Dimension(1680, 1010);
    driver.manage().window().setSize(d);

将光标移开:

    Robot robot = new Robot();
    robot.mouseMove(0, 1050);

无论出于何种原因,只要您需要将鼠标光标重置到底部,您就可以调用上面的代码。

关于java - Selenium Webdriver 的鼠标悬停功能不适用于 Opera 39,并且与 Chrome 53 的工作不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39416698/

相关文章:

firefox - 如何使用 Firefox 驱动程序启动 selenium

java - 微服务中的外部URL配置

java - 使用 log4j-1.2-api 但找不到 log4j1.x 类

javascript - 我该怎么办呢? (Chrome 扩展)

java - 运行appium时启动chrome的问题

google-chrome - 在 Chrome 浏览器窗口之间切换

java - 指定 java 代理的类路径

java - 如何防止我的音乐播放器在电话铃声响起并挂断电话后启动?

python - Selenium 与 Chrome 一起工作,但不是 headless (headless)的 Chrome

selenium - 在 ReportNG 中未获取 TestNG 的报告