Class FluentWait<T>

  • Type Parameters:
    T - The input type for each condition used with this instance.
    All Implemented Interfaces:
    Wait<T>
    Direct Known Subclasses:
    WebDriverWait

    public class FluentWait<T>
    extends java.lang.Object
    implements Wait<T>
    An implementation of the Wait interface that may have its timeout and polling interval configured on the fly.

    Each FluentWait instance defines the maximum amount of time to wait for a condition, as well as the frequency with which to check the condition. Furthermore, the user may configure the wait to ignore specific types of exceptions whilst waiting, such as NoSuchElementExceptions when searching for an element on the page.

    Sample usage:

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

    This class makes no thread safety guarantees.

    • Constructor Summary

      Constructors 
      Constructor Description
      FluentWait​(T input)  
      FluentWait​(T input, java.time.Clock clock, Sleeper sleeper)  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      <K extends java.lang.Throwable>
      FluentWait<T>
      ignoreAll​(java.util.Collection<java.lang.Class<? extends K>> types)
      Configures this instance to ignore specific types of exceptions while waiting for a condition.
      FluentWait<T> ignoring​(java.lang.Class<? extends java.lang.Throwable> exceptionType)  
      FluentWait<T> ignoring​(java.lang.Class<? extends java.lang.Throwable> firstType, java.lang.Class<? extends java.lang.Throwable> secondType)  
      FluentWait<T> pollingEvery​(java.time.Duration interval)
      Sets how often the condition should be evaluated.
      protected java.lang.RuntimeException timeoutException​(java.lang.String message, java.lang.Throwable lastException)
      Throws a timeout exception.
      <V> V until​(java.util.function.Function<? super T,​V> isTrue)
      Repeatedly applies this instance's input value to the given function until one of the following occurs: the function returns neither null nor false the function throws an unignored exception the timeout expires the current thread is interrupted
      FluentWait<T> withMessage​(java.lang.String message)
      Sets the message to be displayed when time expires.
      FluentWait<T> withMessage​(java.util.function.Supplier<java.lang.String> messageSupplier)
      Sets the message to be evaluated and displayed when time expires.
      FluentWait<T> withTimeout​(java.time.Duration timeout)
      Sets how long to wait for the evaluated condition to be true.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • DEFAULT_SLEEP_TIMEOUT

        protected static final long DEFAULT_SLEEP_TIMEOUT
        See Also:
        Constant Field Values
    • Constructor Detail

      • FluentWait

        public FluentWait​(T input)
        Parameters:
        input - The input value to pass to the evaluated conditions.
      • FluentWait

        public FluentWait​(T input,
                          java.time.Clock clock,
                          Sleeper sleeper)
        Parameters:
        input - The input value to pass to the evaluated conditions.
        clock - The clock to use when measuring the timeout.
        sleeper - Used to put the thread to sleep between evaluation loops.
    • Method Detail

      • withTimeout

        public FluentWait<T> withTimeout​(java.time.Duration timeout)
        Sets how long to wait for the evaluated condition to be true. The default timeout is DEFAULT_WAIT_DURATION.
        Parameters:
        timeout - The timeout duration.
        Returns:
        A self reference.
      • withMessage

        public FluentWait<T> withMessage​(java.lang.String message)
        Sets the message to be displayed when time expires.
        Parameters:
        message - to be appended to default.
        Returns:
        A self reference.
      • withMessage

        public FluentWait<T> withMessage​(java.util.function.Supplier<java.lang.String> messageSupplier)
        Sets the message to be evaluated and displayed when time expires.
        Parameters:
        messageSupplier - to be evaluated on failure and appended to default.
        Returns:
        A self reference.
      • pollingEvery

        public FluentWait<T> pollingEvery​(java.time.Duration interval)
        Sets how often the condition should be evaluated.

        In reality, the interval may be greater as the cost of actually evaluating a condition function is not factored in. The default polling interval is DEFAULT_WAIT_DURATION.

        Parameters:
        interval - The timeout duration.
        Returns:
        A self reference.
      • ignoreAll

        public <K extends java.lang.Throwable> FluentWait<T> ignoreAll​(java.util.Collection<java.lang.Class<? extends K>> types)
        Configures this instance to ignore specific types of exceptions while waiting for a condition. Any exceptions not whitelisted will be allowed to propagate, terminating the wait.
        Type Parameters:
        K - an Exception that extends Throwable
        Parameters:
        types - The types of exceptions to ignore.
        Returns:
        A self reference.
      • ignoring

        public FluentWait<T> ignoring​(java.lang.Class<? extends java.lang.Throwable> exceptionType)
        Parameters:
        exceptionType - exception to ignore
        Returns:
        a self reference
        See Also:
        ignoreAll(Collection)
      • ignoring

        public FluentWait<T> ignoring​(java.lang.Class<? extends java.lang.Throwable> firstType,
                                      java.lang.Class<? extends java.lang.Throwable> secondType)
        Parameters:
        firstType - exception to ignore
        secondType - another exception to ignore
        Returns:
        a self reference
        See Also:
        ignoreAll(Collection)
      • until

        public <V> V until​(java.util.function.Function<? super T,​V> isTrue)
        Repeatedly applies this instance's input value to the given function until one of the following occurs:
        1. the function returns neither null nor false
        2. the function throws an unignored exception
        3. the timeout expires
        4. the current thread is interrupted
        Specified by:
        until in interface Wait<T>
        Type Parameters:
        V - The function's expected return type.
        Parameters:
        isTrue - the parameter to pass to the ExpectedCondition
        Returns:
        The function's return value if the function returned something different from null or false before the timeout expired.
        Throws:
        TimeoutException - If the timeout expires.
      • timeoutException

        protected java.lang.RuntimeException timeoutException​(java.lang.String message,
                                                              java.lang.Throwable lastException)
        Throws a timeout exception. This method may be overridden to throw an exception that is idiomatic for a particular test infrastructure, such as an AssertionError in JUnit4.
        Parameters:
        message - The timeout message.
        lastException - The last exception to be thrown and subsequently suppressed while waiting on a function.
        Returns:
        Nothing will ever be returned; this return type is only specified as a convenience.