View Javadoc

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