View Javadoc

1   package com.atlassian.webdriver.it.tests;
2   
3   import com.atlassian.pageobjects.browser.Browser;
4   import com.atlassian.pageobjects.browser.IgnoreBrowser;
5   import com.atlassian.webdriver.it.AbstractFileBasedServerTest;
6   import com.atlassian.webdriver.it.pageobjects.page.WaiterTestPage;
7   import com.atlassian.webdriver.utils.Check;
8   import com.atlassian.webdriver.waiter.Waiter;
9   import com.atlassian.webdriver.waiter.webdriver.function.ConditionFunction;
10  import org.junit.Assert;
11  import org.junit.Before;
12  import org.junit.Test;
13  import org.openqa.selenium.By;
14  import org.openqa.selenium.NoSuchElementException;
15  import org.openqa.selenium.WebDriver;
16  import org.openqa.selenium.WebElement;
17  
18  import java.util.concurrent.TimeUnit;
19  
20  import static org.junit.Assert.*;
21  
22  /**
23   *
24   * @since 2.1
25   */
26  @IgnoreBrowser(Browser.HTMLUNIT_NOJS)
27  public class TestWaiter extends AbstractFileBasedServerTest
28  {
29  
30      WaiterTestPage waiterTestPage;
31      Waiter waiter;
32      WebDriver driver;
33  
34      ConditionFunction falseFunc = new ConditionFunction()
35      {
36          public Boolean apply(WebDriver from)
37          {
38              return false;
39          }
40      };
41  
42      @Before
43      public void setup()
44      {
45          waiterTestPage = product.visit(WaiterTestPage.class);
46          waiter = waiterTestPage.getWaiter();
47          driver = product.getTester().getDriver();
48      }
49  
50      @Test
51      public void testFunctionWaiterIsTrue()
52      {
53          assertEquals("Title was not what it was expected to be", "JavaScriptUtils test page",
54                  driver.getTitle());
55  
56          waiter.until(10, TimeUnit.MILLISECONDS).function(new ConditionFunction() {
57              public Boolean apply(WebDriver from)
58              {
59                  return from.getTitle().equals("JavaScriptUtils test page");
60              }
61          }).isTrue().execute();
62      }
63  
64      @Test
65      public void testFunctionWaiterIsFalse()
66      {
67          assertEquals("Title was not what it was expected to be", "JavaScriptUtils test page",
68                  driver.getTitle());
69          Assert.assertNotSame("Not real title", driver.getTitle());
70          waiter.until(10, TimeUnit.MILLISECONDS).function(new ConditionFunction() {
71              public Boolean apply(WebDriver from)
72              {
73                  return from.getTitle().equals("Not real title");
74              }
75          }).isFalse().execute();
76      }
77  
78      @Test
79      public void testWebElementIsVisible()
80      {
81          WebElement showEl = driver.findElement(By.id("dialog-one-show-button"));
82          WebElement el = driver.findElement(By.id("dialog-one"));
83          assertFalse(el.isDisplayed());
84          showEl.click();
85  
86          waiter.until(1).element(el).isVisible().execute();
87  
88          assertTrue(el.isDisplayed());
89      }
90  
91      @Test
92      public void testWebElementIsVisibleWithDefaultWait()
93      {
94          WebElement showEl = driver.findElement(By.id("dialog-one-show-button"));
95          WebElement el = driver.findElement(By.id("dialog-one"));
96          assertFalse(el.isDisplayed());
97          showEl.click();
98  
99          waiter.until().element(el).isVisible().execute();
100 
101         assertTrue(el.isDisplayed());
102     }
103 
104     @Test
105     public void testWebElementWithByLocatorIsVisible()
106     {
107         WebElement showEl = driver.findElement(By.id("dialog-one-show-button"));
108         WebElement el = driver.findElement(By.id("dialog-one"));
109         assertFalse(el.isDisplayed());
110         showEl.click();
111 
112         waiter.until(1).element(By.id("dialog-one")).isVisible().execute();
113 
114         assertTrue(el.isDisplayed());
115     }
116 
117     @Test
118     public void testWebElementWithByLocatorAndContextIsVisible()
119     {
120         WebElement showEl = driver.findElement(By.id("dialog-one-show-button"));
121         WebElement container = driver.findElement(By.id("dialog-one-container"));
122         WebElement el = container.findElement(By.id("dialog-one"));
123 
124         assertFalse(el.isDisplayed());
125         showEl.click();
126 
127         waiter.until(1).element(By.id("dialog-one"), container).isVisible().execute();
128 
129         assertTrue(el.isDisplayed());
130 
131     }
132 
133     @Test
134     public void testWebElementIsNotVisible()
135     {
136         WebElement hideEl = driver.findElement(By.id("dialog-two-hide-button"));
137         WebElement el = driver.findElement(By.id("dialog-two"));
138 
139         assertTrue(el.isDisplayed());
140         hideEl.click();
141 
142         waiter.until(1).element(el).isNotVisible().execute();
143 
144         assertFalse(el.isDisplayed());
145     }
146 
147     @Test
148     public void testWebElementExists()
149     {
150         WebElement createEl = driver.findElement(By.id("dialog-three-create-button"));
151         try
152         {
153             driver.findElement(By.id("dialog-three"));
154             fail("The web element was not supposed to exist");
155         }
156         catch (NoSuchElementException e) {}
157 
158         createEl.click();
159 
160         waiter.until(1).element(By.id("dialog-three")).exists().execute();
161         
162         assertTrue(driver.findElement(By.id("dialog-three")).isDisplayed());
163     }
164 
165     @Test
166     public void testWebElementNotExists()
167     {
168         WebElement removeEl = driver.findElement(By.id("dialog-four-remove-button"));
169         WebElement el = driver.findElement(By.id("dialog-four"));
170 
171         removeEl.click();
172 
173         waiter.until(1).element(By.id("dialog-four")).doesNotExist().execute();
174 
175         try
176         {
177             driver.findElement(By.id("dialog-four"));
178             fail("The web element was not supposed to exist");
179         }
180         catch (NoSuchElementException e) {}
181 
182     }
183 
184     @Test
185     public void testWebElementIsSelected()
186     {
187         WebElement checkEl = driver.findElement(By.id("dialog-five-select-button"));
188         WebElement el = driver.findElement(By.id("dialog-five"));
189 
190         assertFalse(el.isSelected());
191 
192         checkEl.click();
193 
194         waiter.until(1).element(el).isSelected().execute();
195 
196         assertTrue(el.isSelected());
197     }
198 
199     @Test
200     public void testWebElementIsNotSelected()
201     {
202         WebElement unCheckEl = driver.findElement(By.id("dialog-six-select-button"));
203         WebElement el = driver.findElement(By.id("dialog-six"));
204 
205         assertTrue(el.isSelected());
206 
207         unCheckEl.click();
208 
209         waiter.until(1).element(el).isNotSelected().execute();
210 
211         assertFalse(el.isSelected());
212     }
213 
214     @Test
215     public void testWebElementIsEnabled()
216     {
217         WebElement enableEl = driver.findElement(By.id("dialog-seven-enable-button"));
218         WebElement el = driver.findElement(By.id("dialog-seven"));
219 
220         assertFalse(el.isEnabled());
221 
222         enableEl.click();
223 
224         waiter.until(1).element(el).isEnabled().execute();
225 
226         assertTrue(el.isEnabled());
227     }
228 
229     @Test
230     public void testWebElementIsNotEnabled()
231     {
232         WebElement disableEl = driver.findElement(By.id("dialog-eight-disable-button"));
233         WebElement el = driver.findElement(By.id("dialog-eight"));
234 
235         assertTrue(el.isEnabled());
236 
237         disableEl.click();
238 
239         waiter.until(1).element(el).isNotEnabled().execute();
240 
241         assertFalse(el.isEnabled());
242     }
243 
244     @Test
245     public void testWebElementHasClass()
246     {
247         WebElement addClassEl = driver.findElement(By.id("dialog-nine-addclass-button"));
248         WebElement el = driver.findElement(By.id("dialog-nine"));
249 
250         assertFalse(Check.hasClass("awesome", el));
251 
252         addClassEl.click();
253 
254         waiter.until(1).element(el).hasClass("awesome").execute();
255 
256         assertTrue(Check.hasClass("awesome", el));
257     }
258 
259     @Test
260     public void testWebElementDoesNotHaveClass()
261     {
262         WebElement removeClassEl = driver.findElement(By.id("dialog-ten-removeclass-button"));
263         WebElement el = driver.findElement(By.id("dialog-ten"));
264 
265         assertTrue(Check.hasClass("awesome", el));
266 
267         removeClassEl.click();
268 
269         waiter.until(1).element(el).doesNotHaveClass("awesome").execute();
270 
271         assertFalse(Check.hasClass("awesome", el));
272     }
273 
274     @Test
275     public void testWebElementGetText()
276     {
277         WebElement addTextEl = driver.findElement(By.id("dialog-eleven-addtext-button"));
278         WebElement el = driver.findElement(By.id("dialog-eleven"));
279 
280         assertTrue("".equals(el.getText()));
281 
282         addTextEl.click();
283 
284         waiter.until(1).element(el).getText().isNotEmpty().execute();
285 
286         assertFalse("".equals(el.getText()));
287         assertEquals("Element text did not match expected.", "Dialog eleven", el.getText());
288     }
289 
290     @Test
291     public void testWebElementGetAttribute()
292     {
293         WebElement addAttrEl = driver.findElement(By.id("dialog-twelve-addattribute-button"));
294         WebElement el = driver.findElement(By.id("dialog-twelve"));
295 
296         assertNull(el.getAttribute("data-test"));
297 
298         addAttrEl.click();
299 
300         waiter.until(1).element(el).getAttribute("data-test").isNotEmpty().execute();
301 
302         assertFalse("".equals(el.getAttribute("data-test")));
303         assertEquals("Element attribute data-test did not match expected.",
304                 "value", el.getAttribute("data-test"));
305     }
306 
307     @Test(expected = org.openqa.selenium.TimeoutException.class)
308     public void testWaiterFailure()
309     {
310         waiter.until(1).function(new ConditionFunction() {
311             public Boolean apply(WebDriver from)
312             {
313                 return false;
314             }
315         }).isTrue().execute();
316     }
317 
318     @Test
319     public void testAndWaiterQuery()
320     {
321         WebElement addClassAndTextEl =
322                 driver.findElement(By.id("dialog-thirteen-addattributeandclass-button"));
323         WebElement el = driver.findElement(By.id("dialog-thirteen"));
324 
325         assertFalse(Check.hasClass("awesome", el));
326         assertTrue("".equals(el.getText()));
327 
328         addClassAndTextEl.click();
329 
330         waiter.until(1500, TimeUnit.MILLISECONDS).element(el).hasClass("awesome").and()
331                 .element(el).getText().isNotEmpty().execute();
332 
333         assertTrue(Check.hasClass("awesome", el));
334         assertFalse("".equals(el.getText()));
335         assertEquals("element text was not what was expected.", "Dialog thirteen", el.getText());
336     }
337 
338     @Test
339     public void testOrWaiterQuery()
340     {
341         WebElement addClassEl = driver.findElement(By.id("dialog-nine-addclass-button"));
342         WebElement el = driver.findElement(By.id("dialog-nine"));
343 
344         assertFalse(Check.hasClass("awesome", el));
345 
346         addClassEl.click();
347 
348         waiter.until(1)
349                 .function(falseFunc).isTrue().or()
350                 .element(el).hasClass("awesome").execute();
351 
352         assertTrue(Check.hasClass("awesome", el));
353     }
354 
355     @Test
356     public void testAndOrWaiterQuery()
357     {
358         WebElement addClassEl = driver.findElement(By.id("dialog-nine-addclass-button"));
359         WebElement el = driver.findElement(By.id("dialog-nine"));
360 
361         assertFalse(Check.hasClass("awesome", el));
362 
363         addClassEl.click();
364 
365         waiter.until(1)
366             .function(falseFunc).isFalse().and()
367             .function(falseFunc).isTrue().or()
368             .element(el).hasClass("awesome").execute();
369 
370         assertTrue(Check.hasClass("awesome", el));
371     }
372 
373     @Test
374     public void testOrAndWaiterQuery()
375     {
376         WebElement addClassAndTextEl =
377                 driver.findElement(By.id("dialog-thirteen-addattributeandclass-button"));
378         WebElement el = driver.findElement(By.id("dialog-thirteen"));
379 
380         assertFalse(Check.hasClass("awesome", el));
381         assertTrue("".equals(el.getText()));
382 
383         addClassAndTextEl.click();
384 
385         waiter.until(1500, TimeUnit.MILLISECONDS)
386                 .function(falseFunc).isTrue().or()
387                 .element(el).hasClass("awesome").and()
388                 .element(el).getText().isNotEmpty().execute();
389 
390         assertTrue(Check.hasClass("awesome", el));
391         assertFalse("".equals(el.getText()));
392         assertEquals("element text was not what was expected.", "Dialog thirteen", el.getText());
393     }
394 
395 }