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
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 }