WebDriver Selenium API: ElementNotFoundErrorException when Element is clearly there !

前端 未结 3 454
旧时难觅i
旧时难觅i 2020-12-24 03:37

sometimes when running tests on WebDriver with Javascript turned off, WebDriver crashes due to an ElementNotFound Error when it finds an element, and attempts to click it.

3条回答
  •  攒了一身酷
    2020-12-24 04:19

    This example was posted on Google Groups. According to Google developers:

    1 Use implicit waits. Here the driver will wait up until the designated timeout until the element is found. Be sure to read the javadoc for the caveats. Usage:

    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... 
    

    2 Use the org.openqa.selenium.support.ui.WebDriverWait class. This will poll until the expected condition is true, returning that condition's result (if it's looking for an element). This is much more flexible than implicit waits, as you can define any custom behavior. Usage:

    Function presenceOfElementLocated(final By locator) { 
      return new Function() { 
        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"));
    

提交回复
热议问题