Skip to content

Commit

Permalink
[py]: handle named get_cookie and delete_cookie for None and empt…
Browse files Browse the repository at this point in the history
…y strings (#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]>
  • Loading branch information
navin772 and VietND96 authored Feb 4, 2025
1 parent 1b7742e commit aaf3d0b
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 3 deletions.
16 changes: 13 additions & 3 deletions py/selenium/webdriver/remote/webdriver.py
Original file line number Diff line number Diff line change
Expand Up @@ -715,24 +715,34 @@ def get_cookies(self) -> List[dict]:
return self.execute(Command.GET_ALL_COOKIES)["value"]

def get_cookie(self, name) -> Optional[Dict]:
"""Get a single cookie by name. Returns the cookie if found, None if
not.
"""Get a single cookie by name. Raises ValueError if the name is empty
or whitespace. Returns the cookie if found, None if not.
Example:
--------
>>> cookie = driver.get_cookie('my_cookie')
"""
if not name or name.isspace():
raise ValueError("Cookie name cannot be empty")

with contextlib.suppress(NoSuchCookieException):
return self.execute(Command.GET_COOKIE, {"name": name})["value"]

return None

def delete_cookie(self, name) -> None:
"""Deletes a single cookie with the given name.
"""Deletes a single cookie with the given name. Raises ValueError if
the name is empty or whitespace.
Example:
--------
>>> driver.delete_cookie('my_cookie')
"""

# firefox deletes all cookies when "" is passed as name
if not name or name.isspace():
raise ValueError("Cookie name cannot be empty")

self.execute(Command.DELETE_COOKIE, {"name": name})

def delete_all_cookies(self) -> None:
Expand Down
28 changes: 28 additions & 0 deletions py/test/selenium/webdriver/common/cookie_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -152,3 +152,31 @@ def test_should_not_delete_cookies_with_asimilar_name(cookie, driver, webserver)
cookies = driver.get_cookies()
assert cookie["name"] != cookies[0]["name"]
assert cookie2["name"] == cookies[0]["name"]


def test_get_cookie_raises_value_error_for_empty_name(cookie, driver):
driver.add_cookie(cookie)
with pytest.raises(ValueError, match="Cookie name cannot be empty"):
driver.get_cookie("")
with pytest.raises(ValueError, match="Cookie name cannot be empty"):
driver.get_cookie(" ")
with pytest.raises(ValueError, match="Cookie name cannot be empty"):
driver.get_cookie(None)


def test_delete_cookie_raises_value_error_for_empty_name(cookie, driver):
cookie2 = cookie.copy()
cookie2["name"] = "{}x".format(cookie["name"])
driver.add_cookie(cookie)
driver.add_cookie(cookie2)

with pytest.raises(ValueError, match="Cookie name cannot be empty"):
driver.delete_cookie("")
with pytest.raises(ValueError, match="Cookie name cannot be empty"):
driver.get_cookie(" ")
with pytest.raises(ValueError, match="Cookie name cannot be empty"):
driver.get_cookie(None)

cookies = driver.get_cookies()

assert len(cookies) == 2

0 comments on commit aaf3d0b

Please sign in to comment.