Skip to content

Commit d51e098

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 c79a864 commit d51e098

File tree

2 files changed

+41
-3
lines changed

2 files changed

+41
-3
lines changed

py/selenium/webdriver/remote/webdriver.py

+13-3
Original file line numberDiff line numberDiff line change
@@ -715,24 +715,34 @@ def get_cookies(self) -> List[dict]:
715715
return self.execute(Command.GET_ALL_COOKIES)["value"]
716716

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

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

738748
def delete_all_cookies(self) -> None:

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

+28
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)