1 package com.atlassian.pageobjects.elements.test;
2
3 import com.atlassian.pageobjects.browser.Browser;
4 import com.atlassian.pageobjects.browser.IgnoreBrowser;
5 import com.atlassian.pageobjects.elements.Options;
6 import com.atlassian.pageobjects.elements.PageElement;
7 import com.atlassian.pageobjects.elements.PageElementFinder;
8 import com.atlassian.pageobjects.elements.SelectElement;
9 import com.atlassian.pageobjects.elements.WebDriverElement;
10 import com.atlassian.pageobjects.elements.query.Poller;
11 import com.atlassian.pageobjects.elements.test.pageobjects.page.DynamicPage;
12 import com.atlassian.pageobjects.elements.test.pageobjects.page.ElementsPage;
13 import com.atlassian.pageobjects.elements.timeout.TimeoutType;
14 import com.atlassian.webdriver.utils.by.ByJquery;
15 import org.junit.Test;
16 import org.openqa.selenium.By;
17
18 import javax.inject.Inject;
19
20 import static com.atlassian.pageobjects.elements.query.Poller.waitUntilEquals;
21 import static com.atlassian.pageobjects.elements.query.Poller.waitUntilFalse;
22 import static com.atlassian.pageobjects.elements.query.Poller.waitUntilTrue;
23 import static junit.framework.Assert.assertEquals;
24 import static junit.framework.Assert.assertFalse;
25 import static junit.framework.Assert.assertNotNull;
26 import static junit.framework.Assert.assertTrue;
27
28 @IgnoreBrowser(Browser.HTMLUNIT_NOJS)
29 public class TestElement extends AbstractPageElementBrowserTest
30 {
31 @Inject
32 private PageElementFinder elementFinder;
33
34 @Test
35 public void testFieldInjection()
36 {
37 ElementsPage elementsPage = product.visit(ElementsPage.class);
38
39
40 elementsPage.test1_addElementsButton().click();
41
42
43 Poller.waitUntilTrue(elementsPage.test1_delayedSpan().timed().isPresent());
44 }
45
46 @Test
47 public void testIsPresent()
48 {
49 product.visit(ElementsPage.class);
50
51
52 assertTrue(product.find(By.id("test1_addElementsButton")).isPresent());
53
54
55 assertFalse(product.find(By.id("test1_non_existant")).isPresent());
56
57
58 product.find(By.id("test1_addElementsButton")).click();
59 assertFalse(product.find(By.id("test1_delayedSpan")).isPresent());
60 }
61
62 @Test
63 public void testIsPresentWithParent()
64 {
65 product.visit(ElementsPage.class);
66
67 final PageElement parentContainer = product.find(By.id("parent-container"));
68 assertTrue(parentContainer.isPresent());
69 assertTrue(parentContainer.find(By.className("child-button")).isPresent());
70 }
71
72
73 @Test
74 public void testIsPresentWhenParentIsNotPresent()
75 {
76 product.visit(ElementsPage.class);
77
78 final PageElement notExistingParent = product.find(By.id("not-existing-parent"));
79 assertFalse(notExistingParent.isPresent());
80 assertFalse(notExistingParent.find(By.className("child-button")).isPresent());
81 }
82
83 @Test
84 public void testIsVisible()
85 {
86 product.visit(ElementsPage.class);
87
88 PageElement testInput = product.find(By.id("test2_input"));
89
90
91 assertTrue(testInput.isVisible());
92
93
94 product.find(By.id("test2_addElementsButton")).click();
95 assertTrue(product.find(By.id("test2_delayedSpan")).isVisible());
96
97
98 product.find(By.id("test2_toggleInputVisibility")).click();
99 product.find(By.id("test2_toggleInputVisibilityWithDelay")).click();
100 assertFalse(testInput.isVisible());
101 }
102
103 @Test
104 public void testGetText()
105 {
106 product.visit(ElementsPage.class);
107
108
109 assertEquals("Span Value", product.find(By.id("test3_span")).getText());
110
111
112 product.find(By.id("test3_addElementsButton")).click();
113 assertEquals("Delayed Span", product.find(By.id("test3_delayedSpan")).getText());
114
115
116 product.find(By.id("test3_setTextButton")).click();
117 assertEquals("", product.find(By.id("test3_spanEmpty")).getText());
118 }
119
120 @Test
121 public void testFind()
122 {
123 product.visit(ElementsPage.class);
124
125
126 PageElement childList = product.find(By.id("test4_parentList")).find(By.tagName("ul"));
127 assertEquals("test4_childList", childList.getAttribute("id"));
128
129 PageElement leafList = childList.find(By.tagName("ul"));
130 assertEquals("test4_leafList", leafList.getAttribute("id"));
131
132 PageElement listItem = leafList.find(By.tagName("li"));
133 assertEquals("Item 1", listItem.getText());
134
135
136 product.find(By.id("test4_addElementsButton")).click();
137 waitUntilTrue(leafList.find(By.linkText("Item 4")).timed().isPresent());
138
139
140 product.visit(ElementsPage.class);
141
142 product.find(By.id("test4_addElementsButton")).click();
143 assertEquals("Item 5", product.find(By.className("listitem-active")).getText());
144 }
145
146 @Test
147 public void testGetTagName()
148 {
149 ElementsPage elementsPage = product.visit(ElementsPage.class);
150
151 assertEquals("input", elementsPage.test1_addElementsButton().getTagName());
152 }
153
154 @Test
155 public void testHasAttribute()
156 {
157 ElementsPage elementsPage = product.visit(ElementsPage.class);
158
159
160 assertTrue(elementsPage.test1_addElementsButton().hasAttribute("type", "button"));
161
162
163 assertFalse(elementsPage.test1_addElementsButton().hasAttribute("type", "bar"));
164
165
166 assertFalse(elementsPage.test1_addElementsButton().hasAttribute("nonexistant", "foo"));
167 }
168
169 @Test
170 public void shouldFindElementByJquery()
171 {
172 product.visit(ElementsPage.class);
173 final PageElement awesomeDiv = product.find(By.id("awesome-div"));
174 final PageElement awesomeSpan = awesomeDiv.find(ByJquery.$("span:contains(Awesome)"));
175 assertNotNull(awesomeSpan);
176 assertEquals("awesome-span", awesomeSpan.getAttribute("id"));
177
178 final SelectElement awesomeSelect = elementFinder.find(By.id("awesome-select"), SelectElement.class);
179 awesomeSelect.find(ByJquery.$("option:contains(Volvo)")).select();
180 assertEquals(Options.value("volvo"), awesomeSelect.getSelected());
181 }
182
183 @Test
184 public void shouldRebindElementIfStale_whenLocatedByAnnotation()
185 {
186 DynamicPage page = product.visit(DynamicPage.class);
187
188 assertEquals("Hello Tester!", page.createFieldSet().helloWorld("Tester").getMessage());
189 assertEquals("Hello Developer!", page.createFieldSet().helloWorld("Developer").getMessage());
190
191 }
192
193 @Test
194 public void shouldRebindElementIfStale_whenOriginalElementBecomesStaleAfterSomeTime()
195 {
196
197
198 DynamicPage page = product.visit(DynamicPage.class);
199 page.createFieldSet();
200
201 PageElementFinder elementFinder = page.getElementFinder();
202 PageElement button = elementFinder.find(By.id("helloWorldButton"), TimeoutType.AJAX_ACTION);
203
204 product.getTester().getDriver().executeScript("$('#helloWorldButton').addClass('posting')");
205 page.removeAndCreateFieldSetSlowly();
206 waitUntilFalse(button.timed().hasClass("posting"));
207 }
208
209
210 @Test
211 public void shouldRebindElementIfStale_whenLocatedByElementFinder()
212 {
213 DynamicPage page = product.visit(DynamicPage.class);
214
215 PageElementFinder elementFinder = page.getElementFinder();
216 PageElement username = elementFinder.find(By.id("nameTextBox"));
217 PageElement button = elementFinder.find(By.id("helloWorldButton"));
218 PageElement message = elementFinder.find(By.id("messageSpan"));
219
220 page.createFieldSet();
221
222 username.type("Tester");
223 button.click();
224 assertEquals("Hello Tester!", message.getText());
225
226
227 page.createFieldSet();
228 username.type("Developer");
229 button.click();
230 assertEquals("Hello Developer!", message.getText());
231 }
232
233 @Test
234 public void shouldRebindElementsIfStale_whenLocatedByParentFindSingle()
235 {
236 DynamicPage page = product.visit(DynamicPage.class);
237 PageElementFinder elementFinder = page.getElementFinder();
238
239 PageElement div = elementFinder.find(By.id("placeHolderDiv"));
240 PageElement username = div.find(By.tagName("fieldset")).find(By.id("nameTextBox"));
241 PageElement button = div.find(By.tagName("fieldset")).find(By.id("helloWorldButton"));
242 PageElement message = div.find(By.tagName("fieldset")).find(By.id("messageSpan"));
243
244 page.createFieldSet();
245 username.type("Tester");
246 button.click();
247 assertEquals("Hello Tester!", message.getText());
248
249
250 page.createFieldSet();
251 username.type("Developer");
252 button.click();
253 assertEquals("Hello Developer!", message.getText());
254 }
255
256 @Test
257 public void elementShouldBeConvertedToWebElement()
258 {
259 DynamicPage page = product.visit(DynamicPage.class);
260 PageElementFinder elementFinder = page.getElementFinder();
261
262 PageElement div = elementFinder.find(By.id("placeHolderDiv"));
263 WebDriverElement username = (WebDriverElement) div.find(By.tagName("fieldset")).find(By.id("nameTextBox"));
264 PageElement button = div.find(By.tagName("fieldset")).find(By.id("helloWorldButton"));
265 PageElement message = div.find(By.tagName("fieldset")).find(By.id("messageSpan"));
266
267 page.createFieldSet();
268 username.asWebElement().sendKeys("Tester");
269 button.click();
270 assertEquals("Hello Tester!", message.getText());
271
272
273 page.createFieldSet();
274 username.asWebElement().sendKeys("Developer");
275 button.click();
276 assertEquals("Hello Developer!", message.getText());
277 }
278
279 @Test
280 public void shouldRebindElementsIfStale_whenLocatingByParentFindAll()
281 {
282 DynamicPage page = product.visit(DynamicPage.class);
283 PageElementFinder elementFinder = page.getElementFinder();
284
285 page.createFieldSet();
286
287 PageElement fieldset = elementFinder.find(By.tagName("fieldset"));
288 PageElement username = fieldset.findAll(By.tagName("input")).get(0);
289 PageElement button = fieldset.findAll(By.tagName("input")).get(1);
290 PageElement message = fieldset.find(By.id("messageSpan"));
291
292 username.type("Tester");
293 button.click();
294 assertEquals("Hello Tester!", message.getText());
295
296
297 page.createFieldSet();
298 username.type("Developer");
299 button.click();
300 assertEquals("Hello Developer!", message.getText());
301 }
302
303 @Test
304 public void shouldRebindElementsIfStale_whenLocatingByParentFindAllGivenParentAlwaysExists()
305 {
306 DynamicPage page = product.visit(DynamicPage.class);
307 PageElementFinder elementFinder = page.getElementFinder();
308
309 page.createFieldSet();
310
311 PageElement mainDiv = elementFinder.find(By.id("placeHolderDiv"));
312
313 PageElement username = mainDiv.findAll(By.tagName("input")).get(0).withTimeout(TimeoutType.AJAX_ACTION);
314 PageElement button = mainDiv.findAll(By.tagName("input")).get(1).withTimeout(TimeoutType.AJAX_ACTION);
315 PageElement message = mainDiv.find(By.id("messageSpan")).withTimeout(TimeoutType.AJAX_ACTION);
316
317 username.type("Tester");
318 button.click();
319 assertEquals("Hello Tester!", message.getText());
320
321
322 page.createFieldSetSlowly();
323 username.type("Developer");
324 button.click();
325 waitUntilEquals("Hello Developer!", message.timed().getText());
326 }
327
328 @Test
329 public void testExecuteScriptOnAnElement()
330 {
331 product.visit(ElementsPage.class);
332 PageElement button = elementFinder.find(By.id(("test11_button")));
333
334 assertFalse(button.hasClass("test"));
335
336 button.javascript().execute("$(arguments[0]).addClass('test')");
337 Poller.waitUntilTrue(button.timed().hasClass("test"));
338
339 assertEquals(Boolean.TRUE, button.javascript().execute("return $(arguments[0]).hasClass('test')"));
340 }
341 }