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