View Javadoc

1   package com.atlassian.pageobjects.elements.test;
2   
3   import com.atlassian.pageobjects.Page;
4   import com.atlassian.pageobjects.binder.WaitUntil;
5   import com.atlassian.pageobjects.elements.ElementBy;
6   import com.atlassian.pageobjects.elements.PageElement;
7   import com.atlassian.pageobjects.elements.query.Poller;
8   import com.google.common.collect.Iterables;
9   import org.junit.Test;
10  
11  import static org.junit.Assert.assertEquals;
12  import static org.junit.Assert.assertFalse;
13  import static org.junit.Assert.assertTrue;
14  
15  public class TestElementByInjection extends AbstractFileBasedServerTest
16  {
17      @Test
18      public void testParentInjection()
19      {
20          ElementsPageWithParents elementsPage = product.visit(ElementsPageWithParents.class);
21  
22          assertTrue(elementsPage.parentList.isPresent());
23          assertEquals("test4_parentList", elementsPage.parentList.getAttribute("id"));
24          assertTrue(elementsPage.childList.isPresent());
25          assertEquals("test4_childList", elementsPage.childList.getAttribute("id"));
26          assertTrue(elementsPage.leafList.isPresent());
27          assertEquals("test4_leafList", elementsPage.leafList.getAttribute("id"));
28          assertEquals(3, Iterables.size(elementsPage.children));
29          for (PageElement child : elementsPage.children)
30          {
31              assertTrue(child.isPresent());
32              assertTrue(child.hasClass("test4_item"));
33          }
34      }
35  
36      @Test
37      public void testParentInjectionWithNonExistingChildren()
38      {
39          ElementsPageWithNonExistingChildren elementsPage = product.visit(ElementsPageWithNonExistingChildren.class);
40  
41          assertTrue(elementsPage.parentList.isPresent());
42          assertEquals("test4_parentList", elementsPage.parentList.getAttribute("id"));
43          assertFalse(elementsPage.nonExistingTag.isPresent());
44          assertFalse(elementsPage.nonExistingId.isPresent());
45          assertTrue(Iterables.isEmpty(elementsPage.nonExistingClassName));
46      }
47  
48      @Test
49      public void testParentInjectionWithNonExistingParent()
50      {
51          try
52          {
53              product.visit(ElementsPageWithNonExistingParent.class);
54          }
55          catch(IllegalStateException expected)
56          {
57              assertTrue(expected.getMessage().contains("nonExistingParent"));
58          }
59      }
60  
61      @Test
62      public void testParentInjectionWithParentOfWrongType()
63      {
64          try
65          {
66              product.visit(ElementsPageWithParentOfWrongType.class);
67          }
68          catch(IllegalStateException expected)
69          {
70              assertTrue(expected.getMessage().contains("childWithBadParents"));
71              assertTrue(expected.getMessage().contains("iterableParent"));
72          }
73      }
74  
75  
76      public static final class ElementsPageWithParents implements Page
77      {
78          @ElementBy(id = "test4_parentList")
79          private PageElement parentList;
80  
81          @ElementBy(within = "parentList", id = "test4_childList")
82          private PageElement childList;
83  
84          @ElementBy(within = "childList", tagName = "ul")
85          private PageElement leafList;
86  
87          @ElementBy(within = "leafList", className = "test4_item")
88          private Iterable<PageElement> children;
89  
90  
91          public String getUrl()
92          {
93              return "/html/elements.html";
94          }
95  
96          @WaitUntil
97          private void waitUntilPresent()
98          {
99              Poller.waitUntilTrue(parentList.timed().isPresent());
100         }
101     }
102 
103     public static final class ElementsPageWithNonExistingChildren implements Page
104     {
105         @ElementBy(id = "test4_parentList")
106         private PageElement parentList;
107 
108         @ElementBy(within = "parentList", tagName = "td")
109         private PageElement nonExistingTag;
110 
111         @ElementBy(within = "parentList", id = "no-such-id")
112         private PageElement nonExistingId;
113 
114         @ElementBy(within = "parentList", className = "no-such-class")
115         private Iterable<PageElement> nonExistingClassName;
116 
117 
118         public String getUrl()
119         {
120             return "/html/elements.html";
121         }
122 
123         @WaitUntil
124         private void waitUntilPresent()
125         {
126             Poller.waitUntilTrue(parentList.timed().isPresent());
127         }
128     }
129 
130     public static final class ElementsPageWithNonExistingParent implements Page
131     {
132         @ElementBy(id = "test4_parentList")
133         private PageElement parentList;
134 
135         @ElementBy(within = "noSuchField", id = "test4_childList")
136         private PageElement nonExistingParent;
137 
138         public String getUrl()
139         {
140             return "/html/elements.html";
141         }
142 
143         @WaitUntil
144         private void waitUntilPresent()
145         {
146             Poller.waitUntilTrue(parentList.timed().isPresent());
147         }
148     }
149 
150     public static final class ElementsPageWithParentOfWrongType implements Page
151     {
152         @ElementBy(id = "test4_parentList")
153         private PageElement parentList;
154 
155         @ElementBy(within = "parentList", className = "test4_item")
156         private Iterable<PageElement> iterableParent;
157 
158         @ElementBy(within = "iterableParent", tagName = "td")
159         private PageElement childWithBadParents;
160 
161         public String getUrl()
162         {
163             return "/html/elements.html";
164         }
165 
166         @WaitUntil
167         private void waitUntilPresent()
168         {
169             Poller.waitUntilTrue(parentList.timed().isPresent());
170         }
171     }
172 }