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
4012 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
87
assert returned["sameSite"] == "Strict"
88
89
90
def test_add_cookie_same_site_lax(same_site_cookie_lax, driver):
91
driver.add_cookie(same_site_cookie_lax)
92
returned = driver.get_cookie("foo")
93
assert "sameSite" in returned
94
assert returned["sameSite"] == "Lax"
95
96
97
def test_add_cookie_same_site_none(same_site_cookie_none, driver):
98
driver.add_cookie(same_site_cookie_none)
99
# Note that insecure sites (http:) can't set cookies with the Secure directive.
100
# driver.get_cookie would return None
101
102
103
@pytest.mark.xfail_ie
104
def test_adding_acookie_that_expired_in_the_past(cookie, driver):
105
expired = cookie.copy()
106
expired["expiry"] = calendar.timegm(time.gmtime()) - 1
107
driver.add_cookie(expired)
108
assert 0 == len(driver.get_cookies())
109
110
111
def test_delete_all_cookie(cookie, driver):
112
driver.add_cookie(cookie)
113
driver.delete_all_cookies()
114
assert not driver.get_cookies()
115
116
117
def test_delete_cookie(cookie, driver):
118
driver.add_cookie(cookie)
119
driver.delete_cookie("foo")
120
assert not driver.get_cookies()
121
122
123
def test_should_get_cookie_by_name(driver):
124
key = f"key_{int(random.random() * 10000000)}"
125
driver.execute_script("document.cookie = arguments[0] + '=set';", key)
126
cookie = driver.get_cookie(key)
127
assert "set" == cookie["value"]
128
129
130
def test_should_return_none_when_cookie_does_not_exist(driver):
131
key = f"key_{int(random.random() * 10000000)}"
132
cookie = driver.get_cookie(key)
133
assert cookie is None
134
135
136
def test_get_all_cookies(cookie, driver, pages, webserver):
137
cookies = driver.get_cookies()
138
count = len(cookies)
139
140
for i in range(2):
141
cookie["name"] = f"key_{int(random.random() * 10000000)}"
142
driver.add_cookie(cookie)
143
144
pages.load("simpleTest.html")
145
assert count + 2 == len(driver.get_cookies())
146
147
148
def test_should_not_delete_cookies_with_asimilar_name(cookie, driver, webserver):
149
cookie2 = cookie.copy()
150
cookie2["name"] = "{}x".format(cookie["name"])
151
driver.add_cookie(cookie)
152
driver.add_cookie(cookie2)
153
driver.delete_cookie(cookie["name"])
154
cookies = driver.get_cookies()
155
assert cookie["name"] != cookies[0]["name"]
156
assert cookie2["name"] == cookies[0]["name"]
157
158
159
def test_get_cookie_raises_value_error_for_empty_name(cookie, driver):
160
driver.add_cookie(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(" ")
165
with pytest.raises(ValueError, match="Cookie name cannot be empty"):
166
driver.get_cookie(None)
167
168
169
def test_delete_cookie_raises_value_error_for_empty_name(cookie, driver):
170
cookie2 = cookie.copy()
171
cookie2["name"] = "{}x".format(cookie["name"])
172
driver.add_cookie(cookie)
173
driver.add_cookie(cookie2)
174
175
with pytest.raises(ValueError, match="Cookie name cannot be empty"):
176
driver.delete_cookie("")
177
with pytest.raises(ValueError, match="Cookie name cannot be empty"):
178
driver.get_cookie(" ")
179
with pytest.raises(ValueError, match="Cookie name cannot be empty"):
180
driver.get_cookie(None)
181
182
cookies = driver.get_cookies()
183
184
assert len(cookies) == 2
185
186