Path: blob/trunk/py/test/selenium/webdriver/common/cookie_tests.py
1865 views
# Licensed to the Software Freedom Conservancy (SFC) under one1# or more contributor license agreements. See the NOTICE file2# distributed with this work for additional information3# regarding copyright ownership. The SFC licenses this file4# to you under the Apache License, Version 2.0 (the5# "License"); you may not use this file except in compliance6# with the License. You may obtain a copy of the License at7#8# http://www.apache.org/licenses/LICENSE-2.09#10# Unless required by applicable law or agreed to in writing,11# software distributed under the License is distributed on an12# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY13# KIND, either express or implied. See the License for the14# specific language governing permissions and limitations15# under the License.1617import calendar18import random19import time2021import pytest222324@pytest.fixture25def cookie(webserver):26cookie = {"name": "foo", "value": "bar", "domain": webserver.host, "path": "/", "secure": False}27return cookie282930@pytest.fixture31def same_site_cookie_strict(webserver):32same_site_cookie_strict = {33"name": "foo",34"value": "bar",35"path": "/",36"domain": webserver.host,37"sameSite": "Strict",38"secure": False,39}40return same_site_cookie_strict414243@pytest.fixture44def same_site_cookie_lax(webserver):45same_site_cookie_lax = {46"name": "foo",47"value": "bar",48"path": "/",49"domain": webserver.host,50"sameSite": "Lax",51"secure": False,52}53return same_site_cookie_lax545556@pytest.fixture57def same_site_cookie_none(webserver):58same_site_cookie_none = {59"name": "foo",60"value": "bar",61"path": "/",62"domain": webserver.host,63"sameSite": "None",64"secure": True,65}66return same_site_cookie_none676869@pytest.fixture(autouse=True)70def pages(request, driver, pages):71pages.load("simpleTest.html")72yield pages73driver.delete_all_cookies()747576def test_add_cookie(cookie, driver):77driver.add_cookie(cookie)78returned = driver.execute_script("return document.cookie")79assert cookie["name"] in returned808182def test_add_cookie_same_site_strict(same_site_cookie_strict, driver):83driver.add_cookie(same_site_cookie_strict)84returned = driver.get_cookie("foo")85assert "sameSite" in returned and returned["sameSite"] == "Strict"868788def test_add_cookie_same_site_lax(same_site_cookie_lax, driver):89driver.add_cookie(same_site_cookie_lax)90returned = driver.get_cookie("foo")91assert "sameSite" in returned and returned["sameSite"] == "Lax"929394def test_add_cookie_same_site_none(same_site_cookie_none, driver):95driver.add_cookie(same_site_cookie_none)96# Note that insecure sites (http:) can't set cookies with the Secure directive.97# driver.get_cookie would return None9899100@pytest.mark.xfail_ie101def test_adding_acookie_that_expired_in_the_past(cookie, driver):102expired = cookie.copy()103expired["expiry"] = calendar.timegm(time.gmtime()) - 1104driver.add_cookie(expired)105assert 0 == len(driver.get_cookies())106107108def test_delete_all_cookie(cookie, driver):109driver.add_cookie(cookie)110driver.delete_all_cookies()111assert not driver.get_cookies()112113114def test_delete_cookie(cookie, driver):115driver.add_cookie(cookie)116driver.delete_cookie("foo")117assert not driver.get_cookies()118119120def test_should_get_cookie_by_name(driver):121key = f"key_{int(random.random() * 10000000)}"122driver.execute_script("document.cookie = arguments[0] + '=set';", key)123cookie = driver.get_cookie(key)124assert "set" == cookie["value"]125126127def test_should_return_none_when_cookie_does_not_exist(driver):128key = f"key_{int(random.random() * 10000000)}"129cookie = driver.get_cookie(key)130assert cookie is None131132133def test_get_all_cookies(cookie, driver, pages, webserver):134cookies = driver.get_cookies()135count = len(cookies)136137for i in range(2):138cookie["name"] = f"key_{int(random.random() * 10000000)}"139driver.add_cookie(cookie)140141pages.load("simpleTest.html")142assert count + 2 == len(driver.get_cookies())143144145def test_should_not_delete_cookies_with_asimilar_name(cookie, driver, webserver):146cookie2 = cookie.copy()147cookie2["name"] = "{}x".format(cookie["name"])148driver.add_cookie(cookie)149driver.add_cookie(cookie2)150driver.delete_cookie(cookie["name"])151cookies = driver.get_cookies()152assert cookie["name"] != cookies[0]["name"]153assert cookie2["name"] == cookies[0]["name"]154155156def test_get_cookie_raises_value_error_for_empty_name(cookie, driver):157driver.add_cookie(cookie)158with pytest.raises(ValueError, match="Cookie name cannot be empty"):159driver.get_cookie("")160with pytest.raises(ValueError, match="Cookie name cannot be empty"):161driver.get_cookie(" ")162with pytest.raises(ValueError, match="Cookie name cannot be empty"):163driver.get_cookie(None)164165166def test_delete_cookie_raises_value_error_for_empty_name(cookie, driver):167cookie2 = cookie.copy()168cookie2["name"] = "{}x".format(cookie["name"])169driver.add_cookie(cookie)170driver.add_cookie(cookie2)171172with pytest.raises(ValueError, match="Cookie name cannot be empty"):173driver.delete_cookie("")174with pytest.raises(ValueError, match="Cookie name cannot be empty"):175driver.get_cookie(" ")176with pytest.raises(ValueError, match="Cookie name cannot be empty"):177driver.get_cookie(None)178179cookies = driver.get_cookies()180181assert len(cookies) == 2182183184