Java Selenium 3.3.1和geckodriver 0.15.0没有在Windows 10上等待

时间:2017-04-06 18:51:19

标签: java selenium geckodriver

其他人有上述问题吗? 我似乎无法让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.");}
}

我甚至不必使用隐式调用。

这是我的gecko驱动程序初始化代码,我还初始化了一个隐式等待。

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();

    //try{Thread.sleep(3000);}catch(Exception e){}
    test.waitForPageLoad(test.getDriver());

指导赞赏。

2 个答案:

答案 0 :(得分:1)

我遇到了与selenium 3.3.1,geckodriver 0.15.0和Firefox 52.0.2相同的问题。隐式等待无效。解决方法是继续增加睡眠但这很糟糕。我发现这个bug已经提出https://github.com/mozilla/geckodriver/issues/308

答案 1 :(得分:0)

隐式等待在geckodriver中运行正常,但是页面加载超时在geckodriver中不起作用,这是geckdriver中的一个错误并且它被引发了。所以请使用Legacy fire fox驱动程序,它的效果非常好。

页面超时不起作用意味着,单击按钮后,它不会等待页面完全加载,它会在单击后立即释放控件。

安装Fire fox 47.0.2(这是传统firefox驱动程序可以驱动的最新版本)

如果您使用selenium webdriver 3.3.0,那么geckodriver是默认的,因此对于deactive geckodriver,您只需将参数marionette设为false!

这是我在Ruby selenium绑定中使用的方式来使marionette变为false

caps = Selenium::WebDriver::Remote::Capabilities.firefox(marionette: false)

请找到相应的Java。