2017-04-06 41 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