Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
SeleniumHQ
GitHub Repository: SeleniumHQ/Selenium
Path: blob/trunk/java/test/org/openqa/selenium/ChildrenFindingTest.java
1865 views
1
// Licensed to the Software Freedom Conservancy (SFC) under one
2
// or more contributor license agreements. See the NOTICE file
3
// distributed with this work for additional information
4
// regarding copyright ownership. The SFC licenses this file
5
// to you under the Apache License, Version 2.0 (the
6
// "License"); you may not use this file except in compliance
7
// with the License. You may obtain a copy of the License at
8
//
9
// http://www.apache.org/licenses/LICENSE-2.0
10
//
11
// Unless required by applicable law or agreed to in writing,
12
// software distributed under the License is distributed on an
13
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
// KIND, either express or implied. See the License for the
15
// specific language governing permissions and limitations
16
// under the License.
17
18
package org.openqa.selenium;
19
20
import static org.assertj.core.api.Assertions.assertThat;
21
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
22
import static org.openqa.selenium.testing.drivers.Browser.SAFARI;
23
24
import java.util.List;
25
import org.junit.jupiter.api.Test;
26
import org.openqa.selenium.testing.JupiterTestBase;
27
import org.openqa.selenium.testing.NotYetImplemented;
28
29
class ChildrenFindingTest extends JupiterTestBase {
30
31
@Test
32
void testFindElementByXPath() {
33
driver.get(pages.nestedPage);
34
WebElement element = driver.findElement(By.name("form2"));
35
WebElement child = element.findElement(By.xpath("select"));
36
assertThat(child.getAttribute("id")).isEqualTo("2");
37
}
38
39
@Test
40
void testFindingElementsOnElementByXPathShouldFindTopLevelElements() {
41
driver.get(pages.simpleTestPage);
42
WebElement parent = driver.findElement(By.id("multiline"));
43
List<WebElement> allPs = driver.findElements(By.xpath("//p"));
44
List<WebElement> children = parent.findElements(By.xpath("//p"));
45
assertThat(allPs.size()).isEqualTo(children.size());
46
}
47
48
@Test
49
void testFindingDotSlashElementsOnElementByXPathShouldFindNotTopLevelElements() {
50
driver.get(pages.simpleTestPage);
51
WebElement parent = driver.findElement(By.id("multiline"));
52
List<WebElement> children = parent.findElements(By.xpath("./p"));
53
assertThat(children).hasSize(1);
54
assertThat(children.get(0).getText()).isEqualTo("A div containing");
55
}
56
57
@Test
58
void testFindElementByXPathWhenNoMatch() {
59
driver.get(pages.nestedPage);
60
WebElement element = driver.findElement(By.name("form2"));
61
assertThatExceptionOfType(NoSuchElementException.class)
62
.isThrownBy(() -> element.findElement(By.xpath(".//select/x")));
63
}
64
65
@Test
66
void testFindElementsByXPath() {
67
driver.get(pages.nestedPage);
68
WebElement element = driver.findElement(By.name("form2"));
69
List<WebElement> children = element.findElements(By.xpath("select/option"));
70
assertThat(children).hasSize(8);
71
assertThat(children.get(0).getText()).isEqualTo("One");
72
assertThat(children.get(1).getText()).isEqualTo("Two");
73
}
74
75
@Test
76
void testFindElementsByXPathWhenNoMatch() {
77
driver.get(pages.nestedPage);
78
WebElement element = driver.findElement(By.name("form2"));
79
List<WebElement> children = element.findElements(By.xpath(".//select/x"));
80
assertThat(children).isEmpty();
81
}
82
83
@Test
84
void testFindElementByName() {
85
driver.get(pages.nestedPage);
86
WebElement element = driver.findElement(By.name("form2"));
87
WebElement child = element.findElement(By.name("selectomatic"));
88
assertThat(child.getAttribute("id")).isEqualTo("2");
89
}
90
91
@Test
92
void testFindElementsByName() {
93
driver.get(pages.nestedPage);
94
WebElement element = driver.findElement(By.name("form2"));
95
List<WebElement> children = element.findElements(By.name("selectomatic"));
96
assertThat(children).hasSize(2);
97
}
98
99
@Test
100
void testFindElementById() {
101
driver.get(pages.nestedPage);
102
WebElement element = driver.findElement(By.name("form2"));
103
WebElement child = element.findElement(By.id("2"));
104
assertThat(child.getAttribute("name")).isEqualTo("selectomatic");
105
}
106
107
@Test
108
void testFindElementByIdWhenMultipleMatchesExist() {
109
driver.get(pages.nestedPage);
110
WebElement element = driver.findElement(By.id("test_id_div"));
111
WebElement child = element.findElement(By.id("test_id"));
112
assertThat(child.getText()).isEqualTo("inside");
113
}
114
115
@Test
116
void testFindElementByIdWhenIdContainsNonAlphanumericCharacters() {
117
driver.get(pages.nestedPage);
118
WebElement element = driver.findElement(By.id("test_special_chars"));
119
WebElement childWithSpaces = element.findElement(By.id("white space"));
120
assertThat(childWithSpaces.getText()).isEqualTo("space");
121
WebElement childWithCssChars = element.findElement(By.id("css#.chars"));
122
assertThat(childWithCssChars.getText()).isEqualTo("css escapes");
123
}
124
125
@Test
126
void testFindElementByIdWhenNoMatchInContext() {
127
driver.get(pages.nestedPage);
128
WebElement element = driver.findElement(By.id("test_id_div"));
129
assertThatExceptionOfType(NoSuchElementException.class)
130
.isThrownBy(() -> element.findElement(By.id("test_id_out")));
131
}
132
133
@Test
134
void testFindElementsById() {
135
driver.get(pages.nestedPage);
136
WebElement element = driver.findElement(By.name("form2"));
137
List<WebElement> children = element.findElements(By.id("2"));
138
assertThat(children).hasSize(2);
139
}
140
141
@Test
142
void testFindElementsByIdWithNonAlphanumericCharacters() {
143
driver.get(pages.nestedPage);
144
WebElement element = driver.findElement(By.id("test_special_chars"));
145
List<WebElement> children = element.findElements(By.id("white space"));
146
assertThat(children).hasSize(1);
147
List<WebElement> children2 = element.findElements(By.id("css#.chars"));
148
assertThat(children2).hasSize(1);
149
}
150
151
@Test
152
void testFindElementByLinkText() {
153
driver.get(pages.nestedPage);
154
WebElement element = driver.findElement(By.name("div1"));
155
WebElement child = element.findElement(By.linkText("hello world"));
156
List<WebElement> invalidChildren = element.findElements(By.linkText("HellO WorLD"));
157
assertThat(invalidChildren).isEmpty();
158
assertThat(child.getAttribute("name")).isEqualTo("link1");
159
}
160
161
@Test
162
void testFindElementsByLinkTest() {
163
driver.get(pages.nestedPage);
164
WebElement element = driver.findElement(By.name("div1"));
165
List<WebElement> elements = element.findElements(By.linkText("hello world"));
166
167
assertThat(elements).hasSize(2);
168
assertThat(elements.get(0).getAttribute("name")).isEqualTo("link1");
169
assertThat(elements.get(1).getAttribute("name")).isEqualTo("link2");
170
}
171
172
@Test
173
void testShouldFindChildElementsById() {
174
driver.get(pages.nestedPage);
175
WebElement parent = driver.findElement(By.id("test_id_div"));
176
WebElement element = parent.findElement(By.id("test_id"));
177
assertThat(element.getText()).isEqualTo("inside");
178
}
179
180
@Test
181
void testShouldNotReturnRootElementWhenFindingChildrenById() {
182
driver.get(pages.nestedPage);
183
WebElement parent = driver.findElement(By.id("test_id"));
184
185
assertThat(parent.findElements(By.id("test_id"))).isEmpty();
186
assertThatExceptionOfType(NoSuchElementException.class)
187
.isThrownBy(() -> parent.findElement(By.id("test_id")));
188
}
189
190
@Test
191
void testShouldFindChildElementsByClassName() {
192
driver.get(pages.nestedPage);
193
WebElement parent = driver.findElement(By.name("classes"));
194
195
WebElement element = parent.findElement(By.className("one"));
196
197
assertThat(element.getText()).isEqualTo("Find me");
198
}
199
200
@Test
201
void testShouldFindChildrenByClassName() {
202
driver.get(pages.nestedPage);
203
WebElement parent = driver.findElement(By.name("classes"));
204
205
List<WebElement> elements = parent.findElements(By.className("one"));
206
207
assertThat(elements).hasSize(2);
208
}
209
210
@Test
211
void testShouldFindChildElementsByTagName() {
212
driver.get(pages.nestedPage);
213
WebElement parent = driver.findElement(By.name("div1"));
214
215
WebElement element = parent.findElement(By.tagName("a"));
216
217
assertThat(element.getAttribute("name")).isEqualTo("link1");
218
}
219
220
@Test
221
void testShouldFindChildrenByTagName() {
222
driver.get(pages.nestedPage);
223
WebElement parent = driver.findElement(By.name("div1"));
224
225
List<WebElement> elements = parent.findElements(By.tagName("a"));
226
227
assertThat(elements).hasSize(2);
228
}
229
230
@Test
231
void testShouldBeAbleToFindAnElementByCssSelector() {
232
driver.get(pages.nestedPage);
233
WebElement parent = driver.findElement(By.name("form2"));
234
235
WebElement element = parent.findElement(By.cssSelector("*[name=\"selectomatic\"]"));
236
237
assertThat(element.getAttribute("id")).isEqualTo("2");
238
}
239
240
@Test
241
void testShouldBeAbleToFindAnElementByCss3Selector() {
242
driver.get(pages.nestedPage);
243
WebElement parent = driver.findElement(By.name("form2"));
244
245
WebElement element = parent.findElement(By.cssSelector("*[name^=\"selecto\"]"));
246
247
assertThat(element.getAttribute("id")).isEqualTo("2");
248
}
249
250
@Test
251
void testShouldBeAbleToFindElementsByCssSelector() {
252
driver.get(pages.nestedPage);
253
WebElement parent = driver.findElement(By.name("form2"));
254
255
List<WebElement> elements = parent.findElements(By.cssSelector("*[name=\"selectomatic\"]"));
256
257
assertThat(elements).hasSize(2);
258
}
259
260
@Test
261
void testShouldBeAbleToFindChildrenOfANode() {
262
driver.get(pages.selectableItemsPage);
263
List<WebElement> elements = driver.findElements(By.xpath("/html/head"));
264
WebElement head = elements.get(0);
265
List<WebElement> importedScripts = head.findElements(By.tagName("script"));
266
assertThat(importedScripts).hasSize(3);
267
}
268
269
@Test
270
void testReturnAnEmptyListWhenThereAreNoChildrenOfANode() {
271
driver.get(pages.xhtmlTestPage);
272
WebElement table = driver.findElement(By.id("table"));
273
List<WebElement> rows = table.findElements(By.tagName("tr"));
274
275
assertThat(rows).isEmpty();
276
}
277
278
@Test
279
void testShouldFindGrandChildren() {
280
driver.get(pages.formPage);
281
WebElement form = driver.findElement(By.id("nested_form"));
282
form.findElement(By.name("x"));
283
}
284
285
@Test
286
void testShouldNotFindElementOutSideTree() {
287
driver.get(pages.formPage);
288
WebElement element = driver.findElement(By.name("login"));
289
assertThatExceptionOfType(NoSuchElementException.class)
290
.isThrownBy(() -> element.findElement(By.name("x")));
291
}
292
293
@Test
294
void testFindingByTagNameShouldNotIncludeParentElementIfSameTagType() {
295
driver.get(pages.xhtmlTestPage);
296
WebElement parent = driver.findElement(By.id("my_span"));
297
298
assertThat(parent.findElements(By.tagName("div"))).hasSize(2);
299
assertThat(parent.findElements(By.tagName("span"))).hasSize(2);
300
}
301
302
@Test
303
void testFindingByCssShouldNotIncludeParentElementIfSameTagType() {
304
driver.get(pages.xhtmlTestPage);
305
WebElement parent = driver.findElement(By.cssSelector("div#parent"));
306
WebElement child = parent.findElement(By.cssSelector("div"));
307
308
assertThat(child.getAttribute("id")).isEqualTo("child");
309
}
310
311
@Test
312
void testFindMultipleElements() {
313
driver.get(pages.simpleTestPage);
314
WebElement elem = driver.findElement(By.id("links"));
315
316
List<WebElement> elements = elem.findElements(By.partialLinkText("link"));
317
assertThat(elements).hasSize(6);
318
}
319
320
@Test
321
@NotYetImplemented(SAFARI)
322
public void testLinkWithLeadingSpaces() {
323
driver.get(pages.simpleTestPage);
324
WebElement elem = driver.findElement(By.id("links"));
325
326
WebElement res = elem.findElement(By.partialLinkText("link with leading space"));
327
assertThat(res.getText()).isEqualTo("link with leading space");
328
}
329
330
@Test
331
@NotYetImplemented(SAFARI)
332
public void testLinkWithTrailingSpace() {
333
driver.get(pages.simpleTestPage);
334
WebElement elem = driver.findElement(By.id("links"));
335
336
WebElement res = elem.findElement(By.partialLinkText("link with trailing space"));
337
assertThat(res.getText()).isEqualTo("link with trailing space");
338
}
339
340
@Test
341
void testElementCanGetLinkByLinkTestIgnoringTrailingWhitespace() {
342
driver.get(pages.simpleTestPage);
343
WebElement elem = driver.findElement(By.id("links"));
344
345
WebElement link = elem.findElement(By.linkText("link with trailing space"));
346
assertThat(link.getAttribute("id")).isEqualTo("linkWithTrailingSpace");
347
}
348
}
349
350