1 package com.atlassian.pageobjects.elements.test;
2
3 import com.atlassian.pageobjects.elements.GlobalElementFinder;
4 import com.atlassian.pageobjects.elements.MultiSelectElement;
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.test.pageobjects.page.ElementsPage;
9 import com.atlassian.pageobjects.elements.timeout.DefaultTimeouts;
10 import com.atlassian.pageobjects.elements.timeout.TimeoutType;
11 import org.junit.Before;
12 import org.junit.Test;
13 import org.openqa.selenium.By;
14
15 import java.util.List;
16
17 import static org.junit.Assert.assertEquals;
18 import static org.junit.Assert.assertFalse;
19 import static org.junit.Assert.assertTrue;
20
21 public class TestPageElementAsElementFinder extends AbstractFileBasedServerTest
22 {
23 private PageElementFinder elementFinder;
24
25 @Before
26 public void initFinder()
27 {
28 elementFinder = product.getPageBinder().bind(GlobalElementFinder.class);
29 }
30
31 @Test
32 public void testFind()
33 {
34 product.visit(ElementsPage.class);
35
36 PageElement parent = elementFinder.find(By.id("test4_childList"));
37 PageElement existingChild = parent.find(By.tagName("ul"));
38 assertTrue(existingChild.isPresent());
39 assertEquals("test4_leafList", existingChild.getAttribute("id"));
40
41 PageElement notExistingChild = parent.find(By.tagName("a"));
42 assertFalse(notExistingChild.isPresent());
43 }
44
45 @Test
46 public void testFindCustomType()
47 {
48 product.visit(ElementsPage.class);
49
50 PageElement parent = elementFinder.find(By.id("select-parent-div"));
51 SelectElement select = parent.find(By.className("nested-select-marker"), SelectElement.class);
52 assertTrue(select.isPresent());
53 assertEquals("nested-select", select.getAttribute("id"));
54 assertEquals(4, select.getAllOptions().size());
55
56 MultiSelectElement multiSelect = parent.find(By.className("nested-select-marker"), MultiSelectElement.class);
57 assertTrue(multiSelect.isPresent());
58 assertEquals("nested-select", multiSelect.getAttribute("id"));
59 assertEquals(4, multiSelect.getAllOptions().size());
60 }
61
62 @Test
63 public void testFindWithCustomTimeout()
64 {
65 product.visit(ElementsPage.class);
66
67 PageElement parent = elementFinder.find(By.id("test4_childList"));
68 PageElement child = parent.find(By.tagName("ul"), TimeoutType.PAGE_LOAD);
69 assertTrue(child.isPresent());
70 assertEquals(DefaultTimeouts.DEFAULT_PAGE_LOAD, child.timed().isPresent().defaultTimeout());
71 }
72
73 @Test
74 public void testFindWithCustomTypeAndTimeout()
75 {
76 product.visit(ElementsPage.class);
77
78 PageElement parent = elementFinder.find(By.id("select-parent-div"));
79 SelectElement select = parent.find(By.className("nested-select-marker"), SelectElement.class, TimeoutType.PAGE_LOAD);
80 assertTrue(select.isPresent());
81 assertEquals("nested-select", select.getAttribute("id"));
82 assertEquals(4, select.getAllOptions().size());
83 assertEquals(DefaultTimeouts.DEFAULT_PAGE_LOAD, select.timed().isPresent().defaultTimeout());
84 }
85
86 @Test
87 public void testFindAll()
88 {
89 product.visit(ElementsPage.class);
90
91 PageElement parent = elementFinder.find(By.id("test4_childList"));
92 List<PageElement> items = parent.findAll(By.className("test4_item"));
93 assertEquals(3, items.size());
94 assertEquals("Item 1", items.get(0).getText());
95 assertEquals("Item 2", items.get(1).getText());
96 assertEquals("Item 3", items.get(2).getText());
97 }
98
99 @Test
100 public void testFindAllWithCustomType()
101 {
102 product.visit(ElementsPage.class);
103
104 PageElement parent = elementFinder.find(By.id("select-parent-div"));
105 List<SelectElement> singleSelects = parent.findAll(By.tagName("select"), SelectElement.class);
106
107 assertEquals(2, singleSelects.size());
108 assertTrue(singleSelects.get(0).isPresent());
109 assertEquals("nested-select", singleSelects.get(0).getAttribute("id"));
110 assertTrue(singleSelects.get(1).isPresent());
111 assertEquals("nested-select2", singleSelects.get(1).getAttribute("id"));
112
113 List<MultiSelectElement> multiSelects = parent.findAll(By.tagName("select"), MultiSelectElement.class);
114
115 assertEquals(2, multiSelects.size());
116 assertTrue(multiSelects.get(0).isPresent());
117 assertEquals("nested-select", multiSelects.get(0).getAttribute("id"));
118 assertTrue(multiSelects.get(1).isPresent());
119 assertEquals("nested-select2", multiSelects.get(1).getAttribute("id"));
120
121
122 }
123
124 @Test
125 public void testFindAllWithCustomTimeout()
126 {
127 product.visit(ElementsPage.class);
128
129 PageElement parent = elementFinder.find(By.id("test4_childList"));
130 List<PageElement> items = parent.findAll(By.className("li"), TimeoutType.PAGE_LOAD);
131 for (PageElement element : items)
132 {
133 assertEquals(DefaultTimeouts.DEFAULT_PAGE_LOAD, element.timed().isPresent().defaultTimeout());
134 }
135 }
136
137 @Test
138 public void testFindAllWithCustomTypeAndTimeout()
139 {
140 product.visit(ElementsPage.class);
141
142 PageElement parent = elementFinder.find(By.id("select-parent-div"));
143 List<SelectElement> singleSelects = parent.findAll(By.tagName("select"), SelectElement.class, TimeoutType.PAGE_LOAD);
144 for (PageElement select : singleSelects)
145 {
146 assertTrue(select.isPresent());
147 assertEquals(DefaultTimeouts.DEFAULT_PAGE_LOAD, select.timed().isPresent().defaultTimeout());
148 }
149 }
150 }