Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
SeleniumHQ
GitHub Repository: SeleniumHQ/Selenium
Path: blob/trunk/py/test/selenium/webdriver/common/children_finding_tests.py
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
import pytest
19
20
from selenium.common.exceptions import NoSuchElementException, WebDriverException
21
from selenium.webdriver.common.by import By
22
23
24
def test_should_find_element_by_xpath(driver, pages):
25
pages.load("nestedElements.html")
26
element = driver.find_element(By.NAME, "form2")
27
child = element.find_element(By.XPATH, "select")
28
assert child.get_attribute("id") == "2"
29
30
31
def test_should_not_find_element_by_xpath(driver, pages):
32
pages.load("nestedElements.html")
33
element = driver.find_element(By.NAME, "form2")
34
with pytest.raises(NoSuchElementException):
35
element.find_element(By.XPATH, "select/x")
36
37
38
def test_finding_dot_slash_elements_on_element_by_xpath_should_find_not_top_level_elements(driver, pages):
39
pages.load("simpleTest.html")
40
parent = driver.find_element(By.ID, "multiline")
41
children = parent.find_elements(By.XPATH, "./p")
42
assert 1 == len(children)
43
assert "A div containing" == children[0].text
44
45
46
def test_should_find_elements_by_xpath(driver, pages):
47
pages.load("nestedElements.html")
48
element = driver.find_element(By.NAME, "form2")
49
children = element.find_elements(By.XPATH, "select/option")
50
assert len(children) == 8
51
assert children[0].text == "One"
52
assert children[1].text == "Two"
53
54
55
def test_should_not_find_elements_by_xpath(driver, pages):
56
pages.load("nestedElements.html")
57
element = driver.find_element(By.NAME, "form2")
58
children = element.find_elements(By.XPATH, "select/x")
59
assert len(children) == 0
60
61
62
def test_finding_elements_on_element_by_xpath_should_find_top_level_elements(driver, pages):
63
pages.load("simpleTest.html")
64
parent = driver.find_element(By.ID, "multiline")
65
all_para_elements = driver.find_elements(By.XPATH, "//p")
66
children = parent.find_elements(By.XPATH, "//p")
67
assert len(all_para_elements) == len(children)
68
69
70
def test_should_find_element_by_name(driver, pages):
71
pages.load("nestedElements.html")
72
element = driver.find_element(By.NAME, "form2")
73
child = element.find_element(By.NAME, "selectomatic")
74
assert child.get_attribute("id") == "2"
75
76
77
def test_should_find_elements_by_name(driver, pages):
78
pages.load("nestedElements.html")
79
element = driver.find_element(By.NAME, "form2")
80
children = element.find_elements(By.NAME, "selectomatic")
81
assert len(children) == 2
82
83
84
def test_should_find_element_by_id(driver, pages):
85
pages.load("nestedElements.html")
86
element = driver.find_element(By.NAME, "form2")
87
child = element.find_element(By.ID, "2")
88
assert child.get_attribute("name") == "selectomatic"
89
90
91
def test_should_find_elements_by_id(driver, pages):
92
pages.load("nestedElements.html")
93
element = driver.find_element(By.NAME, "form2")
94
child = element.find_elements(By.ID, "2")
95
assert len(child) == 2
96
97
98
def test_should_find_element_by_id_when_multiple_matches_exist(driver, pages):
99
pages.load("nestedElements.html")
100
element = driver.find_element(By.ID, "test_id_div")
101
child = element.find_element(By.ID, "test_id")
102
assert child.text == "inside"
103
104
105
def test_should_find_element_by_id_when_no_match_in_context(driver, pages):
106
pages.load("nestedElements.html")
107
element = driver.find_element(By.ID, "test_id_div")
108
with pytest.raises(NoSuchElementException):
109
element.find_element(By.ID, "test_id_out")
110
111
112
def test_should_find_element_by_link_text(driver, pages):
113
pages.load("nestedElements.html")
114
element = driver.find_element(By.NAME, "div1")
115
child = element.find_element(By.LINK_TEXT, "hello world")
116
assert child.get_attribute("name") == "link1"
117
118
119
def test_should_find_elements_by_link_text(driver, pages):
120
pages.load("nestedElements.html")
121
element = driver.find_element(By.NAME, "div1")
122
children = element.find_elements(By.LINK_TEXT, "hello world")
123
assert len(children) == 2
124
assert "link1" == children[0].get_attribute("name")
125
assert "link2" == children[1].get_attribute("name")
126
127
128
def test_should_find_element_by_class_name(driver, pages):
129
pages.load("nestedElements.html")
130
parent = driver.find_element(By.NAME, "classes")
131
element = parent.find_element(By.CLASS_NAME, "one")
132
assert "Find me" == element.text
133
134
135
def test_should_find_elements_by_class_name(driver, pages):
136
pages.load("nestedElements.html")
137
parent = driver.find_element(By.NAME, "classes")
138
elements = parent.find_elements(By.CLASS_NAME, "one")
139
assert 2 == len(elements)
140
141
142
def test_should_find_element_by_tag_name(driver, pages):
143
pages.load("nestedElements.html")
144
parent = driver.find_element(By.NAME, "div1")
145
element = parent.find_element(By.TAG_NAME, "a")
146
assert "link1" == element.get_attribute("name")
147
148
149
def test_should_find_elements_by_tag_name(driver, pages):
150
pages.load("nestedElements.html")
151
parent = driver.find_element(By.NAME, "div1")
152
elements = parent.find_elements(By.TAG_NAME, "a")
153
assert 2 == len(elements)
154
155
156
def test_should_be_able_to_find_an_element_by_css_selector(driver, pages):
157
pages.load("nestedElements.html")
158
parent = driver.find_element(By.NAME, "form2")
159
element = parent.find_element(By.CSS_SELECTOR, '*[name="selectomatic"]')
160
assert "2" == element.get_attribute("id")
161
162
163
def test_should_be_able_to_find_multiple_elements_by_css_selector(driver, pages):
164
pages.load("nestedElements.html")
165
parent = driver.find_element(By.NAME, "form2")
166
elements = parent.find_elements(By.CSS_SELECTOR, '*[name="selectomatic"]')
167
assert 2 == len(elements)
168
169
170
def test_should_throw_an_error_if_user_passes_in_invalid_by(driver, pages):
171
pages.load("nestedElements.html")
172
element = driver.find_element(By.NAME, "form2")
173
with pytest.raises(WebDriverException):
174
element.find_element("foo", "bar")
175
176
177
def test_should_throw_an_error_if_user_passes_in_invalid_by_when_find_elements(driver, pages):
178
pages.load("nestedElements.html")
179
element = driver.find_element(By.NAME, "form2")
180
with pytest.raises(WebDriverException):
181
element.find_elements("foo", "bar")
182
183