Class AjaxElementLocator

java.lang.Object
org.openqa.selenium.support.pagefactory.DefaultElementLocator
org.openqa.selenium.support.pagefactory.AjaxElementLocator
All Implemented Interfaces:
ElementLocator

public class AjaxElementLocator extends DefaultElementLocator
An element locator that will wait for the specified number of seconds for an element to appear, rather than failing instantly if it's not present. This works by polling the UI on a regular basis. The element returned will be present on the DOM, but may not actually be visible: override isElementUsable(WebElement) if this is important to you.

Because this class polls the interface on a regular basis, it is strongly recommended that users avoid locating elements by XPath.

  • Field Details

    • timeOutInSeconds

      protected final int timeOutInSeconds
  • Constructor Details

    • AjaxElementLocator

      public AjaxElementLocator(SearchContext context, int timeOutInSeconds, AbstractAnnotations annotations)
      Use this constructor in order to process custom annotations.
      Parameters:
      context - The context to use when finding the element
      timeOutInSeconds - How long to wait for the element to appear. Measured in seconds.
      annotations - AbstractAnnotations class implementation
    • AjaxElementLocator

      public AjaxElementLocator(Clock clock, SearchContext context, int timeOutInSeconds, AbstractAnnotations annotations)
    • AjaxElementLocator

      public AjaxElementLocator(SearchContext searchContext, Field field, int timeOutInSeconds)
      Main constructor.
      Parameters:
      searchContext - The context to use when finding the element
      field - The field representing this element
      timeOutInSeconds - How long to wait for the element to appear. Measured in seconds.
    • AjaxElementLocator

      public AjaxElementLocator(Clock clock, SearchContext searchContext, Field field, int timeOutInSeconds)
  • Method Details

    • findElement

      public WebElement findElement()
      Find the element.

      Will poll the interface on a regular basis until the element is present.

      Specified by:
      findElement in interface ElementLocator
      Overrides:
      findElement in class DefaultElementLocator
    • findElements

      public List<WebElement> findElements()
      Find the element list.

      Will poll the interface on a regular basis until at least one element is present.

      Specified by:
      findElements in interface ElementLocator
      Overrides:
      findElements in class DefaultElementLocator
    • sleepFor

      protected long sleepFor()
      By default, we sleep for 250ms between polls. You may override this method in order to change how it sleeps.
      Returns:
      Duration to sleep in milliseconds
    • isElementUsable

      protected boolean isElementUsable(WebElement element)
      By default, elements are considered "found" if they are in the DOM. Override this method in order to change whether you consider the element loaded. For example, perhaps you need the element to be displayed:
      
       return element.isDisplayed();
       
      Parameters:
      element - The element to use
      Returns:
      Whether it meets your criteria for "found"