Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
SeleniumHQ
GitHub Repository: SeleniumHQ/Selenium
Path: blob/trunk/py/test/selenium/webdriver/common/api_example_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
21
from selenium.webdriver.common.by import By
22
from selenium.webdriver.support import expected_conditions as EC
23
from selenium.webdriver.support.wait import WebDriverWait
24
25
26
def test_get_title(driver, pages):
27
pages.load("simpleTest.html")
28
title = driver.title
29
assert "Hello WebDriver" == title
30
31
32
def test_get_current_url(driver, pages, webserver):
33
pages.load("simpleTest.html")
34
url = driver.current_url
35
assert webserver.where_is("simpleTest.html") == url
36
37
38
def test_find_element_by_xpath(driver, pages):
39
pages.load("simpleTest.html")
40
elem = driver.find_element(By.XPATH, "//h1")
41
assert "Heading" == elem.text
42
43
44
def test_find_element_by_xpath_throw_no_such_element_exception(driver, pages):
45
pages.load("simpleTest.html")
46
with pytest.raises(NoSuchElementException):
47
driver.find_element(By.XPATH, "//h4")
48
49
50
def test_find_elements_by_xpath(driver, pages):
51
pages.load("nestedElements.html")
52
elems = driver.find_elements(By.XPATH, "//option")
53
assert 48 == len(elems)
54
assert "One" == elems[0].get_attribute("value")
55
56
57
def test_find_elements_by_name(driver, pages):
58
pages.load("xhtmlTest.html")
59
elem = driver.find_element(By.NAME, "windowOne")
60
assert "Open new window" == elem.text
61
62
63
def test_find_elements_by_name_in_element_context(driver, pages):
64
pages.load("nestedElements.html")
65
elem = driver.find_element(By.NAME, "form2")
66
sub_elem = elem.find_element(By.NAME, "selectomatic")
67
assert "2" == sub_elem.get_attribute("id")
68
69
70
def test_find_elements_by_link_text_in_element_context(driver, pages):
71
pages.load("nestedElements.html")
72
elem = driver.find_element(By.NAME, "div1")
73
sub_elem = elem.find_element(By.LINK_TEXT, "hello world")
74
assert "link1" == sub_elem.get_attribute("name")
75
76
77
def test_find_element_by_id_in_element_context(driver, pages):
78
pages.load("nestedElements.html")
79
elem = driver.find_element(By.NAME, "form2")
80
sub_elem = elem.find_element(By.ID, "2")
81
assert "selectomatic" == sub_elem.get_attribute("name")
82
83
84
def test_find_element_by_xpath_in_element_context(driver, pages):
85
pages.load("nestedElements.html")
86
elem = driver.find_element(By.NAME, "form2")
87
sub_elem = elem.find_element(By.XPATH, "select")
88
assert "2" == sub_elem.get_attribute("id")
89
90
91
def test_find_element_by_xpath_in_element_context_not_found(driver, pages):
92
pages.load("nestedElements.html")
93
elem = driver.find_element(By.NAME, "form2")
94
with pytest.raises(NoSuchElementException):
95
elem.find_element(By.XPATH, "div")
96
97
98
def test_should_be_able_to_enter_data_into_form_fields(driver, pages):
99
pages.load("xhtmlTest.html")
100
elem = driver.find_element(By.XPATH, "//form[@name='someForm']/input[@id='username']")
101
elem.clear()
102
elem.send_keys("some text")
103
elem = driver.find_element(By.XPATH, "//form[@name='someForm']/input[@id='username']")
104
assert "some text" == elem.get_attribute("value")
105
106
107
def test_find_element_by_tag_name(driver, pages):
108
pages.load("simpleTest.html")
109
elems = driver.find_elements(By.TAG_NAME, "div")
110
num_by_xpath = len(driver.find_elements(By.XPATH, "//div"))
111
assert num_by_xpath == len(elems)
112
elems = driver.find_elements(By.TAG_NAME, "iframe")
113
assert 0 == len(elems)
114
115
116
def test_find_element_by_tag_name_within_element(driver, pages):
117
pages.load("simpleTest.html")
118
div = driver.find_element(By.ID, "multiline")
119
elems = div.find_elements(By.TAG_NAME, "p")
120
assert len(elems) == 1
121
122
123
def test_switch_frame_by_name(driver, pages):
124
pages.load("frameset.html")
125
driver.switch_to.frame(driver.find_element(By.NAME, "third"))
126
checkbox = driver.find_element(By.ID, "checky")
127
checkbox.click()
128
checkbox.submit()
129
130
131
def test_is_enabled(driver, pages):
132
pages.load("formPage.html")
133
elem = driver.find_element(By.XPATH, "//input[@id='working']")
134
assert elem.is_enabled()
135
elem = driver.find_element(By.XPATH, "//input[@id='notWorking']")
136
assert not elem.is_enabled()
137
138
139
def test_is_selected_and_toggle(driver, pages):
140
pages.load("formPage.html")
141
elem = driver.find_element(By.ID, "multi")
142
option_elems = elem.find_elements(By.XPATH, "option")
143
assert option_elems[0].is_selected()
144
option_elems[0].click()
145
assert not option_elems[0].is_selected()
146
option_elems[0].click()
147
assert option_elems[0].is_selected()
148
assert option_elems[2].is_selected()
149
150
151
def test_navigate(driver, pages):
152
pages.load("formPage.html")
153
driver.find_element(By.ID, "imageButton").submit()
154
WebDriverWait(driver, 3).until(EC.title_is("We Arrive Here"))
155
driver.back()
156
assert "We Leave From Here" == driver.title
157
driver.forward()
158
assert "We Arrive Here" == driver.title
159
160
161
def test_get_attribute(driver, pages):
162
url = pages.url("xhtmlTest.html")
163
driver.get(url)
164
elem = driver.find_element(By.ID, "id1")
165
attr = elem.get_attribute("href")
166
assert f"{url}#" == attr
167
168
169
def test_get_implicit_attribute(driver, pages):
170
pages.load("nestedElements.html")
171
elems = driver.find_elements(By.XPATH, "//option")
172
assert len(elems) >= 3
173
for i, elem in enumerate(elems[:3]):
174
assert i == int(elem.get_attribute("index"))
175
176
177
def test_get_dom_attribute(driver, pages):
178
url = pages.url("formPage.html")
179
driver.get(url)
180
elem = driver.find_element(By.ID, "vsearchGadget")
181
attr = elem.get_dom_attribute("accesskey")
182
assert "4" == attr
183
184
185
def test_get_property(driver, pages):
186
url = pages.url("formPage.html")
187
driver.get(url)
188
elem = driver.find_element(By.ID, "withText")
189
prop = elem.get_property("value")
190
assert "Example text" == prop
191
192
193
def test_execute_simple_script(driver, pages):
194
pages.load("xhtmlTest.html")
195
title = driver.execute_script("return document.title;")
196
assert "XHTML Test Page" == title
197
198
199
def test_execute_script_and_return_element(driver, pages):
200
pages.load("xhtmlTest.html")
201
elem = driver.execute_script("return document.getElementById('id1');")
202
assert "WebElement" in str(type(elem))
203
204
205
def test_execute_script_with_args(driver, pages):
206
pages.load("xhtmlTest.html")
207
result = driver.execute_script("return arguments[0] == 'fish' ? 'fish' : 'not fish';", "fish")
208
assert "fish" == result
209
210
211
def test_execute_script_with_multiple_args(driver, pages):
212
pages.load("xhtmlTest.html")
213
result = driver.execute_script("return arguments[0] + arguments[1]", 1, 2)
214
assert 3 == result
215
216
217
def test_execute_script_with_element_args(driver, pages):
218
pages.load("javascriptPage.html")
219
button = driver.find_element(By.ID, "plainButton")
220
result = driver.execute_script(
221
"arguments[0]['flibble'] = arguments[0].getAttribute('id'); return arguments[0]['flibble'];", button
222
)
223
assert "plainButton" == result
224
225
226
def test_find_elements_by_partial_link_text(driver, pages):
227
pages.load("xhtmlTest.html")
228
elem = driver.find_element(By.PARTIAL_LINK_TEXT, "new window")
229
elem.click()
230
231
232
def test_is_element_displayed(driver, pages):
233
pages.load("javascriptPage.html")
234
visible = driver.find_element(By.ID, "displayed").is_displayed()
235
not_visible = driver.find_element(By.ID, "hidden").is_displayed()
236
assert visible
237
assert not not_visible
238
239
240
@pytest.mark.xfail_edge
241
@pytest.mark.xfail_firefox(reason="https://github.com/mozilla/geckodriver/issues/2224")
242
@pytest.mark.xfail_remote(reason="https://github.com/mozilla/geckodriver/issues/2224")
243
@pytest.mark.xfail_safari
244
def test_move_window_position(driver, pages):
245
pages.load("blank.html")
246
loc = driver.get_window_position()
247
# note can't test 0,0 since some OS's dont allow that location
248
# because of system toolbars
249
new_x = 50
250
new_y = 50
251
if loc["x"] == new_x:
252
new_x += 10
253
if loc["y"] == new_y:
254
new_y += 10
255
driver.set_window_position(new_x, new_y)
256
loc = driver.get_window_position()
257
assert loc["x"] == new_x
258
assert loc["y"] == new_y
259
260
261
@pytest.mark.xfail_edge(reason="Window does not resize")
262
def test_change_window_size(driver, pages):
263
pages.load("blank.html")
264
size = driver.get_window_size()
265
newSize = [600, 600]
266
if size["width"] == 600:
267
newSize[0] = 500
268
if size["height"] == 600:
269
newSize[1] = 500
270
driver.set_window_size(newSize[0], newSize[1])
271
size = driver.get_window_size()
272
assert size["width"] == newSize[0]
273
assert size["height"] == newSize[1]
274
275
276
@pytest.mark.xfail_ie(raises=AttributeError, reason="Logging API is no longer available")
277
@pytest.mark.xfail_firefox(raises=AttributeError, reason="Logging API is no longer available")
278
@pytest.mark.xfail_remote(raises=AttributeError, reason="Logging API is no longer available")
279
@pytest.mark.xfail_safari(raises=AttributeError, reason="Logging API is no longer available")
280
@pytest.mark.xfail_webkitgtk(raises=AttributeError, reason="Logging API is no longer available")
281
@pytest.mark.xfail_wpewebkit(raises=AttributeError, reason="Logging API is no longer available")
282
def test_get_log_types(driver, pages):
283
pages.load("blank.html")
284
assert isinstance(driver.log_types, list)
285
286
287
@pytest.mark.xfail_ie(raises=AttributeError, reason="Logging API is no longer available")
288
@pytest.mark.xfail_firefox(raises=AttributeError, reason="Logging API is no longer available")
289
@pytest.mark.xfail_remote(raises=AttributeError, reason="Logging API is no longer available")
290
@pytest.mark.xfail_safari(raises=AttributeError, reason="Logging API is no longer available")
291
@pytest.mark.xfail_webkitgtk(raises=AttributeError, reason="Logging API is no longer available")
292
@pytest.mark.xfail_wpewebkit()(raises=AttributeError, reason="Logging API is no longer available")
293
def test_get_log(driver, pages):
294
pages.load("blank.html")
295
for log_type in driver.log_types:
296
log = driver.get_log(log_type)
297
assert isinstance(log, list)
298
299