View Javadoc

1   package com.atlassian.webdriver.waiter.webdriver;
2   
3   import com.atlassian.annotations.ExperimentalApi;
4   import com.atlassian.webdriver.waiter.webdriver.retriever.WebElementRetriever;
5   import com.atlassian.webdriver.waiter.WaiterQuery;
6   import com.atlassian.webdriver.waiter.webdriver.function.ConditionFunction;
7   import com.atlassian.webdriver.waiter.ElementQuery;
8   import com.atlassian.webdriver.waiter.ExecutableWaiterQuery;
9   import com.atlassian.webdriver.waiter.FunctionQuery;
10  import com.atlassian.webdriver.waiter.Query;
11  import com.google.common.base.Function;
12  import org.apache.commons.lang.NotImplementedException;
13  import org.openqa.selenium.By;
14  import org.openqa.selenium.SearchContext;
15  import org.openqa.selenium.WebDriver;
16  import org.openqa.selenium.WebElement;
17  
18  /**
19   *
20   * <strong>WARNING</strong>: This API is still experimental and may be changed between versions.
21   *
22   * @since 2.1.0
23   */
24  @ExperimentalApi
25  class WebDriverWaiterQuery implements WaiterQuery
26  {
27      private final WebDriverQueryBuilder queryBuilder;
28  
29      public WebDriverWaiterQuery(WebDriverQueryBuilder builder)
30      {
31          this.queryBuilder = builder;
32      }
33  
34      public FunctionQuery function(ConditionFunction func)
35      {
36          return new WebDriverFunctionQuery(queryBuilder, func);
37      }
38  
39      public ElementQuery element(final By locator)
40      {
41          return element(locator, queryBuilder.getDriver());
42      }
43  
44      public ElementQuery element(final By locator, final SearchContext context)
45      {
46          return new WebDriverElementQuery(queryBuilder, WebElementRetriever.newLocatorRetriever(locator, context));
47      }
48  
49      public ElementQuery element(final WebElement element)
50      {
51          return new WebDriverElementQuery(queryBuilder, WebElementRetriever.newWebElementRetriever(element));
52      }
53  
54      static class WebDriverExecutableWaiterQuery
55              implements ExecutableWaiterQuery
56      {
57  
58          private final WebDriverQueryBuilder queryBuilder;
59  
60          public WebDriverExecutableWaiterQuery(WebDriverQueryBuilder queryBuilder) {
61              this.queryBuilder = queryBuilder;
62          }
63  
64          public void execute()
65          {
66              Function<WebDriver,Boolean> func = queryBuilder.build();
67              new AtlassianWebDriverWait(queryBuilder.getDriver(), queryBuilder.getTimeout()).until(func);
68          }
69  
70          public WaiterQuery and()
71          {
72              queryBuilder.add(new AndQuery());
73              return new WebDriverWaiterQuery(queryBuilder);
74          }
75  
76          public WaiterQuery or()
77          {
78              queryBuilder.add(new OrQuery());
79              return new WebDriverWaiterQuery(queryBuilder);
80          }
81      }
82  
83      static class AndQuery implements Query {
84          public ConditionFunction build()
85          {
86              throw new NotImplementedException("This should not be called.");
87          }
88      }
89  
90      static class OrQuery implements Query {
91          public ConditionFunction build()
92          {
93              throw new NotImplementedException("This should not be called.");
94          }
95      }
96  }