Skip to content

Commit 4e95d51

Browse files
navin772VietND96
authored andcommitted
[py]: handle named get_cookie and delete_cookie for None and empty strings (SeleniumHQ#15073)
* handle `None` and empty string case for `get_cookie()` and `delete_cookie()` * run `format.sh` * apply suggestion for test cases --------- Co-authored-by: Viet Nguyen Duc <[email protected]>
1 parent e43cc80 commit 4e95d51

File tree

2 files changed

+41
-3
lines changed

2 files changed

+41
-3
lines changed

py/selenium/webdriver/remote/webdriver.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -716,24 +716,34 @@ def get_cookies(self) -> List[dict]:
716716
return self.execute(Command.GET_ALL_COOKIES)["value"]
717717

718718
def get_cookie(self, name) -> Optional[Dict]:
719-
"""Get a single cookie by name. Returns the cookie if found, None if
720-
not.
719+
"""Get a single cookie by name. Raises ValueError if the name is empty
720+
or whitespace. Returns the cookie if found, None if not.
721721
722722
Example:
723723
--------
724724
>>> cookie = driver.get_cookie('my_cookie')
725725
"""
726+
if not name or name.isspace():
727+
raise ValueError("Cookie name cannot be empty")
728+
726729
with contextlib.suppress(NoSuchCookieException):
727730
return self.execute(Command.GET_COOKIE, {"name": name})["value"]
731+
728732
return None
729733

730734
def delete_cookie(self, name) -> None:
731-
"""Deletes a single cookie with the given name.
735+
"""Deletes a single cookie with the given name. Raises ValueError if
736+
the name is empty or whitespace.
732737
733738
Example:
734739
--------
735740
>>> driver.delete_cookie('my_cookie')
736741
"""
742+
743+
# firefox deletes all cookies when "" is passed as name
744+
if not name or name.isspace():
745+
raise ValueError("Cookie name cannot be empty")
746+
737747
self.execute(Command.DELETE_COOKIE, {"name": name})
738748

739749
def delete_all_cookies(self) -> None:

py/test/selenium/webdriver/common/cookie_tests.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,3 +152,31 @@ def test_should_not_delete_cookies_with_asimilar_name(cookie, driver, webserver)
152152
cookies = driver.get_cookies()
153153
assert cookie["name"] != cookies[0]["name"]
154154
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

0 commit comments

Comments
 (0)