Java Selenium 3.3.1 和 geckodriver 0.15.0 不在 Windows 10 上等待
Posted
技术标签:
【中文标题】Java Selenium 3.3.1 和 geckodriver 0.15.0 不在 Windows 10 上等待【英文标题】:Java Selenium 3.3.1 and geckodriver 0.15.0 not waiting on windows 10 【发布时间】:2017-09-01 23:27:52 【问题描述】:还有其他人遇到上述问题吗? 我似乎无法让 geckodriver 隐式或显式等待。它仅在我使用 Thread.sleep() 时才有效
这是我的 Explicit 方法,它使用 chromedriver 在我的代码库中运行良好:
public void waitForPageLoad(WebDriver driver) throws MyTestException
try new WebDriverWait(driver, page_timeout).until((ExpectedCondition<Boolean>) wd ->
((javascriptExecutor) wd).executeScript("return document.readyState").equals("complete"));
catch (Exception e)logger.warning("Waiting for page load failed.");
我什至不必使用隐式调用。
这是我的壁虎驱动程序初始化代码,其中我还初始化了一个隐式等待。
else if (config.useFirefox())
String geckoDriverLocation = config.getProperty("qa.webdriverpath") + "geckodriver.exe";
System.setProperty("webdriver.gecko.driver", geckoDriverLocation);
driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
//DesiredCapabilities dc = DesiredCapabilities.firefox();
不使用睡眠,它甚至不等待登录元素填充。 示例:
WebElement emailText = test.getDriver().findElement(By.name("email"));
WebElement passText = test.getDriver().findElement(By.name("password"));
WebElement loginButton = test.getDriver().findElement(By.xpath("//input[@type='submit']"));
test.getLogger().info("Logging in as user " + user.contact.getName() + " (" + user.getEmail() + ")...");
emailText.clear();
emailText.click();
emailText.sendKeys(user.getEmail());
emailText.sendKeys(Keys.TAB);
passText.clear();
passText.sendKeys(user.getPassword());
passText.sendKeys(Keys.TAB);
loginButton.click();
//tryThread.sleep(3000);catch(Exception e)
test.waitForPageLoad(test.getDriver());
感谢指导。
【问题讨论】:
那么,您在使用 geckodriver 时遇到了 NoSuchElementException 元素?或者你如何确定隐式等待不起作用? 【参考方案1】:我在 selenium 3.3.1、geckodriver 0.15.0 和 Firefox 52.0.2 上遇到了同样的问题。隐式等待不起作用。解决方法是继续增加睡眠,但这很糟糕。我发现这个错误已经提出https://github.com/mozilla/geckodriver/issues/308
【讨论】:
大约 45 天前,我在 Mac 上使用 selenium 3.1 和 geckodirver .14.0,它工作正常(尽管它不会关闭网页)。不知道现在怎么样了。我实际上遇到了很多错误。【参考方案2】:隐式等待在 geckodriver 中工作正常,但页面加载超时在 geckodriver 中不起作用,这是 geckdriver 中的一个错误,它被提出了。所以请使用 Legacy fire fox 驱动,效果很好。
页面超时不起作用的意思是,点击一个按钮后,它不会等待页面完全加载,点击后立即释放控件。
安装 Fire fox 47.0.2(这是旧版 firefox 驱动程序可以驱动的最后一个版本)
如果您使用 selenium webdriver 3.3.0,则 geckodriver 是默认的,因此要停用 geckodriver,您只需将参数 marionette 设为 false!
这是我在 Ruby selenium 绑定中使用的方式,以使木偶为假
caps = Selenium::WebDriver::Remote::Capabilities.firefox(marionette: false)
请找到对应的Java。
【讨论】:
是的,如果我尝试这样做,我会得到无穷无尽的崩溃堆栈跟踪。我在 Firefox 52 上。基本上这是一个找不到驱动程序的问题。以上是关于Java Selenium 3.3.1 和 geckodriver 0.15.0 不在 Windows 10 上等待的主要内容,如果未能解决你的问题,请参考以下文章
Selenium 3.3.1和FirefoxDriver的依赖性错误