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.AbstractSimpleServerTest;
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.assertEquals;
21 import static org.junit.Assert.assertFalse;
22 import static org.junit.Assert.assertNull;
23 import static org.junit.Assert.assertTrue;
24 import static org.junit.Assert.fail;
25
26 @IgnoreBrowser(Browser.HTMLUNIT_NOJS)
27 public class TestWaiter extends AbstractSimpleServerTest
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 }