Synchronizing a test with an implicit wait

The Selenium WebDriver provides an implicit wait for synchronizing tests. When an implicit wait is implemented in tests, if WebDriver cannot find an element in the DOM, it will wait for a defined amount of time for the element to appear in the DOM. Once the specified wait time is over, it will try searching for the element once again. If the element is not found in specified time, it will throw the NoSuchElement exception.

In other terms, an implicit wait polls the DOM for a certain amount of time when trying to find an element or elements if they are not immediately available. The default setting is 0.

Once set, the implicit wait is set for the life of the WebDriver object's instance.

In this recipe, we will briefly explore the use of an implicit wait. However, it is recommended that you avoid or minimize the use of an implicit wait.

How to do it...

Let's create a test on a demo AJAX-enabled application as follows:

@Test
public void testWithImplicitWait() {
  WebDriver driver = new FirefoxDriver();
  // Launch the sample Ajax application
  driver.get("http://cookbook.seleniumacademy.com/AjaxDemo.html");

  // Set the implicit wait time out to 10 Seconds
  driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

  try {
    // Get link for Page 4 and click on it
    driver.findElement(By.linkText("Page 4")).click();

    // Get an element with id page4 and verify it's text
    WebElement message = driver.findElement(By.id("page4"));
    assertTrue(message.getText().contains("Nunc nibh tortor"));
  } finally {
    driver.quit();
  }
}

How it works...

The Selenium WebDriver provides the Timeouts interface to configure the implicit wait. The Timeouts interface provides an implicitlyWait() method , which accepts the time the driver should wait when searching for an element. In this example, driver will wait for an element to appear in DOM for 10 seconds after an initial try:

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

Until the end of a test, or until an implicit wait is set back to 0, every time an element is searched for using the findElement() method, the test will wait for 10 seconds for an element to appear.

Tip

Using an implicit wait may slow down tests when an application responds normally, as it will wait for each element appearing in the DOM and increase the overall execution time. Minimize or avoid using an implicit wait. Use an explicit wait, which provides more control when compared with an implicit wait.

See also

  • The Synchronizing a test with an explicit wait recipe
  • The Synchronizing a test with custom-expected conditions recipe
  • The Synchronizing a test with FluentWait recipe
..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.142.249.42