diff --git a/py/selenium/webdriver/remote/webdriver.py b/py/selenium/webdriver/remote/webdriver.py index 001708db115ef..cd503c2147a73 100644 --- a/py/selenium/webdriver/remote/webdriver.py +++ b/py/selenium/webdriver/remote/webdriver.py @@ -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: diff --git a/py/test/selenium/webdriver/common/cookie_tests.py b/py/test/selenium/webdriver/common/cookie_tests.py index b3aadebe420b1..6a51a8a371852 100644 --- a/py/test/selenium/webdriver/common/cookie_tests.py +++ b/py/test/selenium/webdriver/common/cookie_tests.py @@ -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