WebDriver Selenium API:当Element明显存在时,ElementNotFoundErrorException!

KJW*_*KJW 9 webdriver

有时在关闭Javascript的WebDriver上运行测试时,WebDriver在找到元素时会因ElementNotFound错误而崩溃,并尝试单击它.

但是,元素显然在那里!

阅读本文后:http://code.google.com/p/selenium/wiki/FrequentlyAskedQuestions#Q : _My_XPath_finds_elements_in_one_browser,_but_not_in_others._Wh

我得出结论,webdriver必须等到网页完成加载后才能等待.我如何使用Webdriver Wait类?有人能提供一个例子吗?

nil*_*esh 18

此示例发布在Google网上论坛中.据谷歌开发人员称:

1使用隐式等待.在这里,驱动程序将等待直到指定的超时,直到找到该元素.请务必阅读javadoc以获取警告.用法:

driver.get("http://www.google.com"); 
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); 
WebElement element = driver.findElement(By.name("q")); 
driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS); 
// continue with test... 
Run Code Online (Sandbox Code Playgroud)

2使用org.openqa.selenium.support.ui.WebDriverWait课程.这将轮询直到预期条件为真,返回该条件的结果(如果它正在寻找一个元素).这比隐式等待更灵活,因为您可以定义任何自定义行为.用法:

Function<WebDriver, WebElement> presenceOfElementLocated(final By locator) { 
  return new Function<WebDriver, WebElement>() { 
    public WebElement apply(WebDriver driver) { 
      return driver.findElement(locator); 
    }
  };
}

// ... 
driver.get("http://www.google.com"); 
WebDriverWait wait = new WebDriverWait(driver, /*seconds=*/3); 
WebElement element = wait.until(presenceOfElementLocated(By.name("q"));
Run Code Online (Sandbox Code Playgroud)