Path: blob/trunk/py/test/selenium/webdriver/common/cookie_tests.py
4012 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 returned86assert returned["sameSite"] == "Strict"878889def test_add_cookie_same_site_lax(same_site_cookie_lax, driver):90driver.add_cookie(same_site_cookie_lax)91returned = driver.get_cookie("foo")92assert "sameSite" in returned93assert returned["sameSite"] == "Lax"949596def test_add_cookie_same_site_none(same_site_cookie_none, driver):97driver.add_cookie(same_site_cookie_none)98# Note that insecure sites (http:) can't set cookies with the Secure directive.99# driver.get_cookie would return None100101102@pytest.mark.xfail_ie103def test_adding_acookie_that_expired_in_the_past(cookie, driver):104expired = cookie.copy()105expired["expiry"] = calendar.timegm(time.gmtime()) - 1106driver.add_cookie(expired)107assert 0 == len(driver.get_cookies())108109110def test_delete_all_cookie(cookie, driver):111driver.add_cookie(cookie)112driver.delete_all_cookies()113assert not driver.get_cookies()114115116def test_delete_cookie(cookie, driver):117driver.add_cookie(cookie)118driver.delete_cookie("foo")119assert not driver.get_cookies()120121122def test_should_get_cookie_by_name(driver):123key = f"key_{int(random.random() * 10000000)}"124driver.execute_script("document.cookie = arguments[0] + '=set';", key)125cookie = driver.get_cookie(key)126assert "set" == cookie["value"]127128129def test_should_return_none_when_cookie_does_not_exist(driver):130key = f"key_{int(random.random() * 10000000)}"131cookie = driver.get_cookie(key)132assert cookie is None133134135def test_get_all_cookies(cookie, driver, pages, webserver):136cookies = driver.get_cookies()137count = len(cookies)138139for i in range(2):140cookie["name"] = f"key_{int(random.random() * 10000000)}"141driver.add_cookie(cookie)142143pages.load("simpleTest.html")144assert count + 2 == len(driver.get_cookies())145146147def test_should_not_delete_cookies_with_asimilar_name(cookie, driver, webserver):148cookie2 = cookie.copy()149cookie2["name"] = "{}x".format(cookie["name"])150driver.add_cookie(cookie)151driver.add_cookie(cookie2)152driver.delete_cookie(cookie["name"])153cookies = driver.get_cookies()154assert cookie["name"] != cookies[0]["name"]155assert cookie2["name"] == cookies[0]["name"]156157158def test_get_cookie_raises_value_error_for_empty_name(cookie, driver):159driver.add_cookie(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(" ")164with pytest.raises(ValueError, match="Cookie name cannot be empty"):165driver.get_cookie(None)166167168def test_delete_cookie_raises_value_error_for_empty_name(cookie, driver):169cookie2 = cookie.copy()170cookie2["name"] = "{}x".format(cookie["name"])171driver.add_cookie(cookie)172driver.add_cookie(cookie2)173174with pytest.raises(ValueError, match="Cookie name cannot be empty"):175driver.delete_cookie("")176with pytest.raises(ValueError, match="Cookie name cannot be empty"):177driver.get_cookie(" ")178with pytest.raises(ValueError, match="Cookie name cannot be empty"):179driver.get_cookie(None)180181cookies = driver.get_cookies()182183assert len(cookies) == 2184185186