2017-04-06 39 views
2

任何人有问题? 我似乎无法让geckodriver以隐式或显式等待。它只有当我使用了Thread.sleep作品()Java的硒3.3.1和geckodriver 0.15.0不是等待窗口上述10

这是我这在我的整个代码库与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(); 

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

指导理解。

+0

所以,你正在使用geckodriver时得到NoSuchElementException异常的元素呢?或者你如何确定隐含的等待不起作用? –

回答

0

隐等待在geckodriver工作正常,但页面加载时间出来不geckodriver工作,它是在geckdriver一个错误,它被提出。所以请使用Legacy fire Fox驱动程序,它工作得很好。

页超时不工作的手段,你点击一个按钮后,它不会等待页面完全加载,它的点击后立即释放控制。

安装火狐47.0.2(这是最后一个版本的Firefox传统驱动器能驱动)

如果使用硒的webdriver 3.3.0然后geckodriver是默认的所以要取消激活geckodriver,你只要把参数木偶假!

这是我在Ruby中硒结合使用,使木偶假

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

请找到相应的一个到Java的方式。

+0

是的,如果我尝试的话,我会得到无尽的堆栈跟踪。我在Firefox 52上。基本上这是一个没有驱动程序发现问题。 – Miek

1

我遇到了同样的问题,硒3.3.1,geckodriver 0.15.0和Firefox 52.0.2。隐含的等待不起作用。解决方法是继续添加睡眠,但这很糟糕。我发现这个bug已经提出https://github.com/mozilla/geckodriver/issues/308

+0

大约45天前,我在mac上使用selenium 3.1和geckodirver .14.0,并且它工作正常(尽管它不会关闭网页)。不知道现在怎么样。我实际上遇到了很多错误。 – Miek