View Javadoc

1   package com.atlassian.pageobjects.elements.query.webdriver;
2   
3   import com.atlassian.annotations.Internal;
4   import com.atlassian.pageobjects.elements.WebDriverLocatable;
5   import com.atlassian.pageobjects.elements.query.*;
6   import com.atlassian.pageobjects.elements.timeout.TimeoutType;
7   import com.atlassian.pageobjects.elements.timeout.Timeouts;
8   import com.atlassian.webdriver.AtlassianWebDriver;
9   import com.google.common.base.Supplier;
10  import org.openqa.selenium.Dimension;
11  import org.openqa.selenium.Point;
12  
13  import javax.annotation.concurrent.NotThreadSafe;
14  import javax.inject.Inject;
15  import java.util.Set;
16  
17  import static com.atlassian.pageobjects.elements.timeout.TimeoutType.DEFAULT;
18  import static com.google.common.base.Preconditions.checkNotNull;
19  import static com.google.common.base.Preconditions.checkState;
20  
21  /**
22   * Creates various WebDriver-based queries.
23   */
24  @NotThreadSafe
25  @Internal
26  public class WebDriverQueryFactory
27  {
28      private final WebDriverLocatable locatable;
29  
30      @Inject
31      private Timeouts timeouts;
32  
33      @Inject
34      private AtlassianWebDriver webDriver;
35  
36      public WebDriverQueryFactory(WebDriverLocatable locatable)
37      {
38          this.locatable = checkNotNull(locatable);
39      }
40  
41      public WebDriverQueryFactory(WebDriverLocatable locatable, Timeouts timeouts, AtlassianWebDriver webDriver)
42      {
43          this.locatable = checkNotNull(locatable);
44          this.timeouts = timeouts;
45          this.webDriver = webDriver;
46      }
47  
48      private long interval = -1L;
49  
50      private long interval()
51      {
52          if (interval == -1)
53          {
54              interval = timeouts.timeoutFor(TimeoutType.EVALUATION_INTERVAL);
55              checkState(interval > 0);
56          }
57          return interval;
58      }
59  
60      public TimedCondition isPresent(TimeoutType timeoutType)
61      {
62          return new WebDriverLocatableBasedTimedCondition(locatable, webDriver, WebDriverQueryFunctions.isPresent(),
63                  timeouts.timeoutFor(timeoutType), interval());
64      }
65  
66      public TimedCondition isPresent()
67      {
68          return isPresent(DEFAULT);
69      }
70  
71      public TimedCondition isVisible(TimeoutType timeoutType)
72      {
73          return new WebDriverLocatableBasedTimedCondition(locatable, webDriver, WebDriverQueryFunctions.isVisible(),
74                  timeouts.timeoutFor(timeoutType), interval());
75      }
76  
77      public TimedCondition isVisible()
78      {
79          return isVisible(DEFAULT);
80      }
81  
82      public TimedCondition isEnabled(TimeoutType timeoutType)
83      {
84          return new WebDriverLocatableBasedTimedCondition(locatable, webDriver, WebDriverQueryFunctions.isEnabled(),
85                  timeouts.timeoutFor(timeoutType), interval());
86      }
87  
88      public TimedCondition isEnabled()
89      {
90          return isEnabled(DEFAULT);
91      }
92  
93      public TimedCondition isSelected(TimeoutType timeoutType)
94      {
95          return new WebDriverLocatableBasedTimedCondition(locatable, webDriver, WebDriverQueryFunctions.isSelected(),
96                  timeouts.timeoutFor(timeoutType), interval());
97      }
98  
99      public TimedCondition isSelected()
100     {
101         return isSelected(DEFAULT);
102     }
103 
104     public TimedQuery<String> getText(TimeoutType timeoutType)
105     {
106         return new WebDriverLocatableBasedTimedQuery<String>(locatable, webDriver, WebDriverQueryFunctions.getText(),
107                 timeouts.timeoutFor(timeoutType), interval());
108     }
109 
110     public TimedQuery<String> getText()
111     {
112         return getText(DEFAULT);
113     }
114 
115     public TimedQuery<String> getValue(TimeoutType timeoutType)
116     {
117         return new WebDriverLocatableBasedTimedQuery<String>(locatable, webDriver, WebDriverQueryFunctions.getValue(),
118                 timeouts.timeoutFor(timeoutType), interval());
119     }
120 
121     public TimedQuery<String> getValue()
122     {
123         return getValue(DEFAULT);
124     }
125 
126     public TimedCondition hasAttribute(String attributeName, String expectedValue, TimeoutType timeoutType)
127     {
128         return new WebDriverLocatableBasedTimedCondition(locatable, webDriver,
129                 WebDriverQueryFunctions.hasAttribute(attributeName, expectedValue),
130                 timeouts.timeoutFor(timeoutType), interval());
131     }
132 
133     public TimedCondition hasAttribute(String attributeName, String expectedValue)
134     {
135         return hasAttribute(attributeName, expectedValue, DEFAULT);
136     }
137 
138     public TimedQuery<String> getAttribute(String attributeName, TimeoutType timeoutType)
139     {
140         return new WebDriverLocatableBasedTimedQuery<String>(locatable, webDriver,
141                 WebDriverQueryFunctions.getAttribute(attributeName),
142                 timeouts.timeoutFor(timeoutType), interval());
143     }
144 
145     public TimedQuery<String> getAttribute(String attributeName)
146     {
147         return getAttribute(attributeName, DEFAULT);
148     }
149 
150     public TimedQuery<Set<String>> getCssClasses(TimeoutType timeoutType)
151     {
152         return new WebDriverLocatableBasedTimedQuery<Set<String>>(locatable, webDriver,
153                 WebDriverQueryFunctions.getCssClasses(), timeouts.timeoutFor(timeoutType), interval());
154     }
155 
156     public TimedCondition hasClass(String className, TimeoutType timeoutType)
157     {
158         return new WebDriverLocatableBasedTimedCondition(locatable, webDriver, WebDriverQueryFunctions.hasClass(className),
159                 timeouts.timeoutFor(timeoutType), interval());
160     }
161 
162     public TimedCondition hasClass(String className)
163     {
164         return hasClass(className, DEFAULT);
165     }
166 
167     public TimedQuery<String> getTagName(TimeoutType timeoutType)
168     {
169         return new WebDriverLocatableBasedTimedQuery<String>(locatable, webDriver, WebDriverQueryFunctions.getTagName(),
170                 timeouts.timeoutFor(timeoutType), interval());
171     }
172 
173     public TimedQuery<String> getTagName()
174     {
175         return getTagName(DEFAULT);
176     }
177 
178     public TimedCondition hasText(String text, TimeoutType timeoutType)
179     {
180         return new WebDriverLocatableBasedTimedCondition(locatable, webDriver, WebDriverQueryFunctions.hasText(text),
181                 timeouts.timeoutFor(timeoutType), interval());
182     }
183 
184     public TimedCondition hasText(String text)
185     {
186         return hasText(text, DEFAULT);
187     }
188 
189     public TimedCondition hasValue(String value, TimeoutType timeoutType)
190     {
191         return new WebDriverLocatableBasedTimedCondition(locatable, webDriver, WebDriverQueryFunctions.hasValue(value),
192                 timeouts.timeoutFor(timeoutType), interval());
193     }
194 
195     public TimedCondition hasValue(String value)
196     {
197         return hasValue(value, DEFAULT);
198     }
199 
200     public TimedQuery<Point> getLocation(TimeoutType timeoutType)
201     {
202         return new WebDriverLocatableBasedTimedQuery<Point>(locatable, webDriver, WebDriverQueryFunctions.getLocation(),
203                 timeouts.timeoutFor(timeoutType), interval());
204     }
205 
206     public TimedQuery<Dimension> getSize(TimeoutType timeoutType)
207     {
208         return new WebDriverLocatableBasedTimedQuery<Dimension>(locatable, webDriver, WebDriverQueryFunctions.getSize(),
209                 timeouts.timeoutFor(timeoutType), interval());
210     }
211 
212     public <T> TimedQuery<T> forSupplier(final Supplier<T> supplier, TimeoutType timeoutType)
213     {
214         return new AbstractTimedQuery<T>(timeouts.timeoutFor(timeoutType), PollingQuery.DEFAULT_INTERVAL,
215                 ExpirationHandler.RETURN_CURRENT)
216         {
217 
218             @Override
219             protected boolean shouldReturn(T currentEval)
220             {
221                 return true;
222             }
223 
224             @Override
225             protected T currentValue()
226             {
227                 return supplier.get();
228             }
229         };
230     }
231 
232     public <T> TimedQuery<T> forSupplier(final Supplier<T> supplier)
233     {
234         return forSupplier(supplier, DEFAULT);
235     }
236 }