Differences between impilicit, explicit and fluentwait

后端 未结 6 1829
离开以前
离开以前 2020-12-02 02:19

What are the exact differences between implicitwait(), explicitwait() and fluentwait()? Could you explain with examples?

6条回答
  •  无人及你
    2020-12-02 02:46

    ImplicitWait

    ImplicitWait is an implementation to configure the WebDriver instance i.e. the driver to poll the HTML DOM for a certain amount of time (interms of NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS or DAYS) when trying to find an element or elements if they are not immediately available. The default setting is 0 which means the driver when finds an instruction to find an element or elements, the search starts and results are available on immediate basis.

    In this case, after a fresh loading of a Webpage an element or elements may be / may not be found on an immediate search. So your Automation Script may be facing any of these exceptions:

    • NoSuchElementException
    • TimeoutException
    • ElementNotVisibleException
    • ElementNotSelectableException

    Hence we introduce ImplicitWait. By introducing ImplicitWait the driver will poll the HTML DOM for the configured amount of time looking out for the element or elements. By that time the element or elements for which you had been looking for may be available in the HTML DOM. As in your code you have already set ImplicitWait to a value of 10 seconds, the driver will poll the HTML DOM for 10 seconds.

    • Python:

      driver.implicitly_wait(10)
      
    • Java:

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

    Finally, once you set the ImplicitWait, the WebDriver instance i.e. the driver is able to carry this configuration till its lifetime. But if you need to change the coarse of time for the WebDriver instance i.e. the driver to wait then you can reconfigure it as follows:

    • Python:

      driver.implicitly_wait(5)
      
    • Java:

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

    If at any point of time you want to nullify the ImplicitWait you can reconfigure it as follows:

    • Python:

      driver.implicitly_wait(0)
      
    • Java:

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

    Fluent Wait

    Fluent Wait is the implementation of the Wait interface through which we can configure the timeout and polling interval on the fly. An instance of FluentWait can be defined to configure the maximum amount of time to wait for a condition as well as the frequency at which the condition must be checked. User can also configure the wait to ignore specific types of exceptions while waiting for an element, such as NoSuchElementExceptions on the page.

    • Usage:

         // Waiting 30 seconds for an element to be present on the page, checking
         // for its presence once every 5 seconds.
         Wait wait = new FluentWait(driver)
             .withTimeout(30, SECONDS)
             .pollingEvery(5, SECONDS)
             .ignoring(NoSuchElementException.class);
      
         WebElement foo = wait.until(new Function() {
           public WebElement apply(WebDriver driver) {
             return driver.findElement(By.id("foo"));
           }
         });
      

    ExplicitWait

    ExplicitWait commonly known as WebDriverWait is a specialized implementation of FluentWait through which user can define, configure and implement for the WebDriver instance to wait for a certain condition to be met before proceeding for the next line of code. There are some methods that helps us to implement ExplicitWait that will wait only as long as required. WebDriverWait in combination with ExpectedCondition is one of the way ExplicitWait can be achieved.

    An Example:

    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.support.ui.ExpectedConditions;
    import org.openqa.selenium.support.ui.WebDriverWait;
    .
    .
    .
    WebDriverWait wait = new WebDriverWait(driver, 10);
    WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("element_xpath")));
    element.click();
    

    Explanation

    This implementation of ExplicitWait waits up to 10 seconds before throwing a TimeoutException or if it finds the element then it will return within 0 to 10 seconds. WebDriverWait by default calls the ExpectedCondition every 500 milliseconds until it returns successfully. A successful return value for the ExpectedCondition function type is a Boolean value of true or a not-null object.

    Expected Conditions

    There are some frequently encountered conditions when automating Web Browsers for Testing Web/Mobile Applications. The Java, C# and Python bindings include those convenient methods so we don’t have to write-up an ExpectedCondition class ourselves or create our own utility package for them. Some of the Expected Conditions are:

    • alertIsPresent()
    • elementToBeClickable(locator)
    • elementToBeSelected(WebElement)
    • frameToBeAvailableAndSwitchToIt(locator)
    • invisibilityOf(element)

    You can find about the all the methods supported by Expected Conditions here.

提交回复
热议问题