View Javadoc

1   package com.atlassian.webdriver.waiter.webdriver;
2   
3   import com.atlassian.annotations.ExperimentalApi;
4   
5   import com.atlassian.webdriver.waiter.webdriver.function.ConditionFunction;
6   import com.atlassian.webdriver.waiter.ElementQuery;
7   import com.atlassian.webdriver.waiter.ExecutableWaiterQuery;
8   import com.atlassian.webdriver.waiter.Query;
9   import com.atlassian.webdriver.waiter.StringValueQuery;
10  import com.atlassian.webdriver.waiter.webdriver.function.NotFunction;
11  import com.atlassian.webdriver.waiter.webdriver.function.element.ExistsFunction;
12  import com.atlassian.webdriver.waiter.webdriver.function.element.HasClassFunction;
13  import com.atlassian.webdriver.waiter.webdriver.function.element.IsEnabledFunction;
14  import com.atlassian.webdriver.waiter.webdriver.function.element.IsSelectedFunction;
15  import com.atlassian.webdriver.waiter.webdriver.function.element.IsVisibleFunction;
16  import com.atlassian.webdriver.waiter.webdriver.retriever.WebElementFieldRetriever;
17  import com.atlassian.webdriver.waiter.webdriver.retriever.WebElementRetriever;
18  
19  /**
20   *
21   * <strong>WARNING</strong>: This API is still experimental and may be changed between versions.
22   *
23   * @since 2.1.0
24   */
25  @ExperimentalApi
26  public class WebDriverElementQuery implements ElementQuery
27  {
28      private final WebDriverQueryBuilder builder;
29      private final WebElementRetriever webElementRetriever;
30  
31      public WebDriverElementQuery(WebDriverQueryBuilder builder, WebElementRetriever webElementRetriever)
32      {
33          this.builder = builder;
34          this.webElementRetriever = webElementRetriever;
35      }
36  
37      public ExecutableWaiterQuery isVisible()
38      {
39          return createExecutableWaiterQuery(new IsVisibleFunction(webElementRetriever));
40      }
41  
42      public ExecutableWaiterQuery isNotVisible()
43      {
44          return createExecutableWaiterQuery(not(new IsVisibleFunction(webElementRetriever)));
45      }
46  
47      public ExecutableWaiterQuery exists()
48      {
49          return createExecutableWaiterQuery(new ExistsFunction(webElementRetriever));
50      }
51  
52      public ExecutableWaiterQuery doesNotExist()
53      {
54          return createExecutableWaiterQuery(not(new ExistsFunction(webElementRetriever)));
55      }
56  
57      public StringValueQuery getAttribute(String attributeName)
58      {
59          return new WebDriverFieldQuery(builder, 
60                  WebElementFieldRetriever.newAttributeRetriever(webElementRetriever, attributeName));
61      }
62  
63      public ExecutableWaiterQuery isSelected()
64      {
65          return createExecutableWaiterQuery(new IsSelectedFunction(webElementRetriever));
66      }
67  
68      public ExecutableWaiterQuery isNotSelected()
69      {
70          return createExecutableWaiterQuery(not(new IsSelectedFunction(webElementRetriever)));
71      }
72  
73      public ExecutableWaiterQuery isEnabled()
74      {
75          return createExecutableWaiterQuery(new IsEnabledFunction(webElementRetriever));
76      }
77  
78      public ExecutableWaiterQuery isNotEnabled()
79      {
80          return createExecutableWaiterQuery(not(new IsEnabledFunction(webElementRetriever)));
81      }
82  
83      public ExecutableWaiterQuery hasClass(String className)
84      {
85          return createExecutableWaiterQuery(new HasClassFunction(webElementRetriever, className));
86      }
87  
88      public ExecutableWaiterQuery doesNotHaveClass(final String className)
89      {
90          return createExecutableWaiterQuery(not(new HasClassFunction(webElementRetriever, className)));
91      }
92  
93      public StringValueQuery getText()
94      {
95          return new WebDriverFieldQuery(builder,
96                  WebElementFieldRetriever.newTextRetriever(webElementRetriever));
97      }
98  
99      private ConditionFunction not(ConditionFunction func)
100     {
101         return new NotFunction(func);
102     }
103 
104     private ExecutableWaiterQuery createExecutableWaiterQuery(final ConditionFunction function)
105     {
106         builder.add(new Query()
107         {
108             @Override
109             public ConditionFunction build()
110             {
111                 return function;
112             }
113         });
114         return new WebDriverWaiterQuery.WebDriverExecutableWaiterQuery(builder);
115     }
116 
117 }