Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
SeleniumHQ
GitHub Repository: SeleniumHQ/Selenium
Path: blob/trunk/py/test/selenium/webdriver/common/cookie_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 calendar
19
import random
20
import time
21
22
import pytest
23
24
25
@pytest.fixture
26
def cookie(webserver):
27
cookie = {"name": "foo", "value": "bar", "domain": webserver.host, "path": "/", "secure": False}
28
return cookie
29
30
31
@pytest.fixture
32
def same_site_cookie_strict(webserver):
33
same_site_cookie_strict = {
34
"name": "foo",
35
"value": "bar",
36
"path": "/",
37
"domain": webserver.host,
38
"sameSite": "Strict",
39
"secure": False,
40
}
41
return same_site_cookie_strict
42
43
44
@pytest.fixture
45
def same_site_cookie_lax(webserver):
46
same_site_cookie_lax = {
47
"name": "foo",
48
"value": "bar",
49
"path": "/",
50
"domain": webserver.host,
51
"sameSite": "Lax",
52
"secure": False,
53
}
54
return same_site_cookie_lax
55
56
57
@pytest.fixture
58
def same_site_cookie_none(webserver):
59
same_site_cookie_none = {
60
"name": "foo",
61
"value": "bar",
62
"path": "/",
63
"domain": webserver.host,
64
"sameSite": "None",
65
"secure": True,
66
}
67
return same_site_cookie_none
68
69
70
@pytest.fixture(autouse=True)
71
def pages(request, driver, pages):
72
pages.load("simpleTest.html")
73
yield pages
74
driver.delete_all_cookies()
75
76
77
def test_add_cookie(cookie, driver):
78
driver.add_cookie(cookie)
79
returned = driver.execute_script("return document.cookie")
80
assert cookie["name"] in returned
81
82
83
def test_add_cookie_same_site_strict(same_site_cookie_strict, driver):
84
driver.add_cookie(same_site_cookie_strict)
85
returned = driver.get_cookie("foo")
86
assert "sameSite" in returned and returned["sameSite"] == "Strict"
87
88
89
def test_add_cookie_same_site_lax(same_site_cookie_lax, driver):
90
driver.add_cookie(same_site_cookie_lax)
91
returned = driver.get_cookie("foo")
92
assert "sameSite" in returned and returned["sameSite"] == "Lax"
93
94
95
def test_add_cookie_same_site_none(same_site_cookie_none, driver):
96
driver.add_cookie(same_site_cookie_none)
97
# Note that insecure sites (http:) can't set cookies with the Secure directive.
98
# driver.get_cookie would return None
99
100
101
@pytest.mark.xfail_ie
102
def test_adding_acookie_that_expired_in_the_past(cookie, driver):
103
expired = cookie.copy()
104
expired["expiry"] = calendar.timegm(time.gmtime()) - 1
105
driver.add_cookie(expired)
106
assert 0 == len(driver.get_cookies())
107
108
109
def test_delete_all_cookie(cookie, driver):
110
driver.add_cookie(cookie)
111
driver.delete_all_cookies()
112
assert not driver.get_cookies()
113
114
115
def test_delete_cookie(cookie, driver):
116
driver.add_cookie(cookie)
117
driver.delete_cookie("foo")
118
assert not driver.get_cookies()
119
120
121
def test_should_get_cookie_by_name(driver):
122
key = f"key_{int(random.random() * 10000000)}"
123
driver.execute_script("document.cookie = arguments[0] + '=set';", key)
124
cookie = driver.get_cookie(key)
125
assert "set" == cookie["value"]
126
127
128
def test_should_return_none_when_cookie_does_not_exist(driver):
129
key = f"key_{int(random.random() * 10000000)}"
130
cookie = driver.get_cookie(key)
131
assert cookie is None
132
133
134
def test_get_all_cookies(cookie, driver, pages, webserver):
135
cookies = driver.get_cookies()
136
count = len(cookies)
137
138
for i in range(2):
139
cookie["name"] = f"key_{int(random.random() * 10000000)}"
140
driver.add_cookie(cookie)
141
142
pages.load("simpleTest.html")
143
assert count + 2 == len(driver.get_cookies())
144
145
146
def test_should_not_delete_cookies_with_asimilar_name(cookie, driver, webserver):
147
cookie2 = cookie.copy()
148
cookie2["name"] = "{}x".format(cookie["name"])
149
driver.add_cookie(cookie)
150
driver.add_cookie(cookie2)
151
driver.delete_cookie(cookie["name"])
152
cookies = driver.get_cookies()
153
assert cookie["name"] != cookies[0]["name"]
154
assert cookie2["name"] == cookies[0]["name"]
155
156
157
def test_get_cookie_raises_value_error_for_empty_name(cookie, driver):
158
driver.add_cookie(cookie)
159
with pytest.raises(ValueError, match="Cookie name cannot be empty"):
160
driver.get_cookie("")
161
with pytest.raises(ValueError, match="Cookie name cannot be empty"):
162
driver.get_cookie(" ")
163
with pytest.raises(ValueError, match="Cookie name cannot be empty"):
164
driver.get_cookie(None)
165
166
167
def test_delete_cookie_raises_value_error_for_empty_name(cookie, driver):
168
cookie2 = cookie.copy()
169
cookie2["name"] = "{}x".format(cookie["name"])
170
driver.add_cookie(cookie)
171
driver.add_cookie(cookie2)
172
173
with pytest.raises(ValueError, match="Cookie name cannot be empty"):
174
driver.delete_cookie("")
175
with pytest.raises(ValueError, match="Cookie name cannot be empty"):
176
driver.get_cookie(" ")
177
with pytest.raises(ValueError, match="Cookie name cannot be empty"):
178
driver.get_cookie(None)
179
180
cookies = driver.get_cookies()
181
182
assert len(cookies) == 2
183
184