View Javadoc

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.pageobjects.browser.RequireBrowser;
6   import com.atlassian.webdriver.it.AbstractFileBasedServerTest;
7   import com.atlassian.webdriver.it.pageobjects.page.ByJqueryPage;
8   import com.atlassian.webdriver.utils.by.ByJquery;
9   import org.junit.Before;
10  import org.junit.Test;
11  import org.openqa.selenium.NoSuchElementException;
12  import org.openqa.selenium.WebDriver;
13  import org.openqa.selenium.WebElement;
14  
15  import java.util.List;
16  
17  import static org.junit.Assert.assertEquals;
18  import static org.junit.Assert.assertNull;
19  import static org.junit.Assert.assertTrue;
20  
21  /**
22   * Test for checking ByJquery functionality in Atlassian WebDriver.
23   */
24  @IgnoreBrowser(Browser.HTMLUNIT_NOJS)
25  public class TestByJquery extends AbstractFileBasedServerTest
26  {
27  
28      ByJqueryPage byJqueryPage;
29      WebDriver driver;
30  
31      @Before
32      public void init()
33      {
34          byJqueryPage = product.visit(ByJqueryPage.class);
35          driver = product.getTester().getDriver();
36      }
37      
38      @Test
39      public void testGetHeadingByJquery()
40      {
41          assertEquals("By Jquery test page",driver.findElement(ByJquery.$("h1")).getText());
42      }
43  
44      @Test
45      public void testSimpleClassSelector()
46      {
47          List<WebElement> els = driver.findElements(ByJquery.$(".class1"));
48          assertTrue(els.size() == 1);
49  
50          WebElement el = els.get(0);
51          assertEquals("div", el.getTagName());
52          assertEquals("class1", el.getAttribute("class"));
53          assertEquals("Simple class test", el.getText());
54      }
55  
56      @Test
57      @IgnoreBrowser(value = {Browser.HTMLUNIT}, reason = "HtmlUnit does not support className magic")
58      public void testClassNameReturnsClass()
59      {
60          List<WebElement> els = driver.findElements(ByJquery.$(".class1"));
61          assertEquals(1, els.size());
62  
63          assertEquals("class1", els.get(0).getAttribute("className"));
64      }
65  
66      @Test
67      @RequireBrowser(Browser.HTMLUNIT)
68      public void testClassNameFailsToReturnsClassInHtmlUnit()
69      {
70          List<WebElement> els = driver.findElements(ByJquery.$(".class1"));
71          assertEquals(1, els.size());
72  
73          assertNull(els.get(0).getAttribute("className"));
74      }
75  
76      @Test
77      public void testSimpleIdSelector()
78      {
79          List<WebElement> els = driver.findElements(ByJquery.$("#id1"));
80          assertTrue(els.size() == 1);
81  
82          WebElement el = els.get(0);
83          assertEquals("div", el.getTagName());
84          assertEquals("id1", el.getAttribute("id"));
85          assertEquals("Simple ID test", el.getText());
86      }
87  
88      @Test
89      public void testMultipleSelector()
90      {
91          List<WebElement> els = driver.findElements(ByJquery.$("#id2 .innerblock"));
92          assertTrue(els.size() == 1);
93  
94          WebElement el = els.get(0);
95          assertEquals("div", el.getTagName());
96          assertEquals("innerblock", el.getAttribute("class"));
97          assertEquals("Inner block test", el.getText());
98      }
99  
100     @Test
101     public void testMultipleElementsByClassName()
102     {
103         List<WebElement> els = driver.findElements(ByJquery.$("div.block2").children());
104         assertTrue(els.size() == 2);
105 
106 
107         for (WebElement el : els)
108         {
109             assertEquals("span", el.getTagName());
110         }
111     }
112 
113     @Test
114     public void testContainsSelector()
115     {
116         List<WebElement> els = driver.findElements(ByJquery.$("div:contains('contains1')"));
117         assertTrue("Expected two elements to be found.", els.size() == 2);
118 
119         assertEquals("contains-test", els.get(0).getAttribute("class"));
120         assertEquals("contains1", els.get(1).getText());
121     }
122 
123     @Test
124     public void testMultipleSelectorWithContains()
125     {
126         List<WebElement> els = driver.findElements(ByJquery.$(".contains-test div:contains('contains1')"));
127 
128         assertTrue("Only expected one element to be found", els.size() == 1);
129 
130         assertEquals("contains1", els.get(0).getText());
131     }
132 
133     @Test(expected = NoSuchElementException.class)
134     public void testSingleSelectorElementNotFoundShouldThrowException()
135     {
136         driver.findElement(ByJquery.$("#NonExistant"));
137     }
138 
139     @Test(expected = NoSuchElementException.class)
140     public void testMultipleSelectorElementNotFoundShouldThrowException()
141     {
142         driver.findElement(ByJquery.$("#id2 .nonExistant"));
143     }
144 
145     @Test
146     public void testClosestSelectorLocatesParent()
147     {
148         WebElement el = driver.findElement(ByJquery.$("li.item-a").closest("ul"));
149         assertEquals("level-2", el.getAttribute("class"));
150     }
151 
152     @Test
153     public void testClosestSelectorLocatesSelf()
154     {
155         WebElement el = driver.findElement(ByJquery.$("li.item-a").closest("li"));
156         assertEquals("item-a", el.getAttribute("class"));
157     }
158 
159     @Test
160     public void testFilterUsingASelector()
161     {
162         List<WebElement> els = driver.findElements(ByJquery.$("#filter-test div").filter("':odd'"));
163 
164         assertEquals("Expected to find 3 elements", 3, els.size());
165 
166         assertEquals("First element should be 2", "2", els.get(0).getText());
167         assertEquals("Second element should be 12", "12", els.get(1).getText());
168         assertEquals("Third element should be 22", "22", els.get(2).getText());
169     }
170 
171     @Test
172     public void testFilterUsingAFunction()
173     {
174         List<WebElement> els = driver.findElements(ByJquery.$("#filter-test div").filter("function() { return ATLWD.$(this).text() == '1' }"));
175 
176         assertEquals("Expected to find 1 element", 1, els.size());
177 
178         assertEquals("Element text should be 1", "1", els.get(0).getText());
179     }
180 
181     @Test
182     public void testFilterUsingFunctionWithIndex()
183     {
184         List<WebElement> els = driver.findElements(ByJquery.$("#filter-test div").filter("function(index) { return index % 3 == 2 }"));
185 
186         assertEquals("Expected to find 2 elements", 2, els.size());
187 
188         assertEquals("The first element text should be 11", "11", els.get(0).getText());
189         assertEquals("The second element text should be 22", "22", els.get(1).getText());
190     }
191 }