【发布时间】:2019-08-20 03:47:40
【问题描述】:
我正在学习如何使用 Selenium WebDriver 自动化测试,但是我卡住了,无法让下拉菜单在 Firefox 中工作。相同的代码在 Chrome 中运行良好。
我正在练习的网站是: http://www.executeautomation.com/demosite/index.html 我想从菜单中单击以下项目:自动化工具 > Selenium > Selenium WebDriver。
错误信息表明网页元素可能还没有加载到屏幕上,所以我实现了一些方法来等待每次执行,直到元素出现:
public static void ImplicitWait(WebDriver driver){
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
}
但它没有帮助。
然后我读到最好“管道”那些 moveToElement() 方法,而不是一个一个地执行它们。所以我改变了这个:
action.moveToElement(menu).perform();
action.moveToElement(selenium).perform();
action.moveToElement(seleniumWebDriver).click().build().perform();
到一行。此时它开始在 Chrome 上运行,但我仍在努力让它在 Firefox 上运行。
当前代码如下所示:
System.setProperty("webdriver.gecko.driver", "C:\\Drivers\\geckodriver-v0.24.0-win64\\geckodriver.exe");
System.setProperty("webdriver.firefox.bin", "C:\\Program Files\\Mozilla Firefox\\firefox.exe");
WebDriver driver = new FirefoxDriver();
ImplicitWait(driver);
driver.navigate().to("http://executeautomation.com/demosite/index.html");
WebElement menu = driver.findElement(By.id("Automation Tools"));
WebElement selenium = driver.findElement(By.id("Selenium"));
WebElement seleniumWebDriver = driver.findElement(By.id("Selenium WebDriver"));
Actions action = new Actions(driver);
action.moveToElement(menu).moveToElement(selenium).moveToElement(seleniumWebDriver).click().build().perform();
正如我上面提到的,当我切换到 Chrome 时,同样可以正常工作,但使用 Firefox 我收到错误消息:
Exception in thread "main" org.openqa.selenium.interactions.MoveTargetOutOfBoundsException: (-9862, 206) is out of bounds of viewport width (1283) and height (699)
我正在使用: * 火狐 v66.0.2 * Java v1.8.0_201 * Selenium Java v3.141.59 * GeckoDriver v0.24.0
请帮忙。
【问题讨论】:
-
首先要检查的是浏览器的缩放级别,它可能会导致悬停功能失效。它应该始终是 100%。如果您的缩放级别很好,您可能会遇到这种情况:github.com/mozilla/geckodriver/issues/1507
-
@Ardesco 缩放级别很好。另外,我认为我不受链接问题的影响。一些建议的答案有效,但只是部分有效。我仍在寻找完美的解决方案。
标签: java selenium firefox geckodriver mousehover