From 757e1229d2fb8fd643c7f29282de084acc517389 Mon Sep 17 00:00:00 2001 From: Navin Chandra Date: Mon, 13 Jan 2025 22:59:31 +0530 Subject: [PATCH 1/3] handle `None` and empty string case for `get_cookie()` and `delete_cookie()` --- py/selenium/webdriver/remote/webdriver.py | 21 ++++++++++++++++--- .../selenium/webdriver/common/cookie_tests.py | 20 ++++++++++++++++++ 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/py/selenium/webdriver/remote/webdriver.py b/py/selenium/webdriver/remote/webdriver.py index d40a98d01b9fc..7ab67bacda58b 100644 --- a/py/selenium/webdriver/remote/webdriver.py +++ b/py/selenium/webdriver/remote/webdriver.py @@ -639,26 +639,41 @@ 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. :Usage: :: driver.get_cookie('my_cookie') + + :Raises: + ValueError: If the cookie name is empty or whitespace. """ + 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. :Usage: :: driver.delete_cookie('my_cookie') + + :Raises: + ValueError: If the cookie name is empty or whitespace. """ + + # 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: diff --git a/py/test/selenium/webdriver/common/cookie_tests.py b/py/test/selenium/webdriver/common/cookie_tests.py index b3aadebe420b1..d5662f832050a 100644 --- a/py/test/selenium/webdriver/common/cookie_tests.py +++ b/py/test/selenium/webdriver/common/cookie_tests.py @@ -152,3 +152,23 @@ 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("") + + +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("") + + cookies = driver.get_cookies() + + assert len(cookies) == 2 From 9664721209d89f31e48207677fe5980ca9faf4d1 Mon Sep 17 00:00:00 2001 From: Navin Chandra Date: Mon, 13 Jan 2025 23:02:20 +0530 Subject: [PATCH 2/3] run `format.sh` --- py/selenium/webdriver/remote/webdriver.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/py/selenium/webdriver/remote/webdriver.py b/py/selenium/webdriver/remote/webdriver.py index 7ab67bacda58b..d272c7f51a31c 100644 --- a/py/selenium/webdriver/remote/webdriver.py +++ b/py/selenium/webdriver/remote/webdriver.py @@ -639,8 +639,8 @@ 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. Raises ValueError if the name is empty or whitespace. - 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. :Usage: :: @@ -659,7 +659,8 @@ def get_cookie(self, name) -> Optional[Dict]: return None def delete_cookie(self, name) -> None: - """Deletes a single cookie with the given name. Raises ValueError if the name is empty or whitespace. + """Deletes a single cookie with the given name. Raises ValueError if + the name is empty or whitespace. :Usage: :: From 3589c6b285154b46af4954910c33308d75d2260a Mon Sep 17 00:00:00 2001 From: Navin Chandra Date: Tue, 14 Jan 2025 17:37:12 +0530 Subject: [PATCH 3/3] apply suggestion for test cases --- py/test/selenium/webdriver/common/cookie_tests.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/py/test/selenium/webdriver/common/cookie_tests.py b/py/test/selenium/webdriver/common/cookie_tests.py index d5662f832050a..6a51a8a371852 100644 --- a/py/test/selenium/webdriver/common/cookie_tests.py +++ b/py/test/selenium/webdriver/common/cookie_tests.py @@ -158,6 +158,10 @@ 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): @@ -168,6 +172,10 @@ def test_delete_cookie_raises_value_error_for_empty_name(cookie, driver): 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()