Path: blob/trunk/py/test/selenium/webdriver/common/bidi_storage_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 random18import time1920import pytest2122from selenium.webdriver.common.bidi.storage import (23BrowsingContextPartitionDescriptor,24BytesValue,25CookieFilter,26PartialCookie,27SameSite,28StorageKeyPartitionDescriptor,29)30from selenium.webdriver.common.window import WindowTypes313233def generate_unique_key():34return f"key_{random.randint(0, 100000)}"353637def assert_cookie_is_not_present_with_name(driver, key):38assert driver.get_cookie(key) is None39document_cookie = get_document_cookie_or_none(driver)40if document_cookie is not None:41assert key + "=" not in document_cookie424344def assert_cookie_is_present_with_name(driver, key):45assert driver.get_cookie(key) is not None46document_cookie = get_document_cookie_or_none(driver)47if document_cookie is not None:48assert key + "=" in document_cookie495051def assert_cookie_has_value(driver, key, value):52assert driver.get_cookie(key)["value"] == value53document_cookie = get_document_cookie_or_none(driver)54if document_cookie is not None:55assert f"{key}={value}" in document_cookie565758def assert_no_cookies_are_present(driver):59assert len(driver.get_cookies()) == 060document_cookie = get_document_cookie_or_none(driver)61if document_cookie is not None:62assert document_cookie == ""636465def assert_some_cookies_are_present(driver):66assert len(driver.get_cookies()) > 067document_cookie = get_document_cookie_or_none(driver)68if document_cookie is not None:69assert document_cookie != ""707172def get_document_cookie_or_none(driver):73try:74return driver.execute_script("return document.cookie")75except Exception:76return None777879class TestBidiStorage:80@pytest.fixture(autouse=True)81def setup(self, driver, pages):82driver.get(pages.url("simpleTest.html"))83driver.delete_all_cookies()8485def test_storage_initialized(self, driver):86"""Test that the storage module is initialized properly."""87assert driver.storage is not None8889def test_get_cookie_by_name(self, driver, pages, webserver):90"""Test getting a cookie by name."""91assert_no_cookies_are_present(driver)9293key = generate_unique_key()94value = "set"95assert_cookie_is_not_present_with_name(driver, key)9697driver.add_cookie({"name": key, "value": value})9899# Test100cookie_filter = CookieFilter(name=key, value=BytesValue(BytesValue.TYPE_STRING, "set"))101102result = driver.storage.get_cookies(filter=cookie_filter)103104# Verify105assert len(result.cookies) > 0106assert result.cookies[0].value.value == value107108@pytest.mark.xfail_chrome109@pytest.mark.xfail_edge110def test_get_cookie_in_default_user_context(self, driver, pages, webserver):111"""Test getting a cookie in the default user context."""112assert_no_cookies_are_present(driver)113114window_handle = driver.current_window_handle115key = generate_unique_key()116value = "set"117assert_cookie_is_not_present_with_name(driver, key)118119driver.add_cookie({"name": key, "value": value})120121# Test122cookie_filter = CookieFilter(name=key, value=BytesValue(BytesValue.TYPE_STRING, "set"))123124driver.switch_to.new_window(WindowTypes.WINDOW)125126descriptor = BrowsingContextPartitionDescriptor(driver.current_window_handle)127128params = cookie_filter129result_after_switching_context = driver.storage.get_cookies(filter=params, partition=descriptor)130131assert len(result_after_switching_context.cookies) > 0132assert result_after_switching_context.cookies[0].value.value == value133134driver.switch_to.window(window_handle)135136descriptor = BrowsingContextPartitionDescriptor(driver.current_window_handle)137138result = driver.storage.get_cookies(filter=cookie_filter, partition=descriptor)139140assert len(result.cookies) > 0141assert result.cookies[0].value.value == value142partition_key = result.partition_key143144assert partition_key.source_origin is not None145assert partition_key.user_context is not None146assert partition_key.user_context == "default"147148def test_get_cookie_in_a_user_context(self, driver, pages, webserver):149"""Test getting a cookie in a user context."""150assert_no_cookies_are_present(driver)151152user_context = driver.browser.create_user_context()153window_handle = driver.current_window_handle154155key = generate_unique_key()156value = "set"157158descriptor = StorageKeyPartitionDescriptor(user_context=user_context)159160parameters = PartialCookie(key, BytesValue(BytesValue.TYPE_STRING, value), webserver.host)161162driver.storage.set_cookie(cookie=parameters, partition=descriptor)163164# Test165cookie_filter = CookieFilter(name=key, value=BytesValue(BytesValue.TYPE_STRING, "set"))166167# Create a new window with the user context168new_window = driver.browsing_context.create(type=WindowTypes.TAB, user_context=user_context)169170driver.switch_to.window(new_window)171172result = driver.storage.get_cookies(filter=cookie_filter, partition=descriptor)173174assert len(result.cookies) > 0175assert result.cookies[0].value.value == value176partition_key = result.partition_key177178assert partition_key.user_context is not None179assert partition_key.user_context == user_context180181driver.switch_to.window(window_handle)182183browsing_context_partition_descriptor = BrowsingContextPartitionDescriptor(window_handle)184185result1 = driver.storage.get_cookies(filter=cookie_filter, partition=browsing_context_partition_descriptor)186187assert len(result1.cookies) == 0188189# Clean up190driver.browsing_context.close(new_window)191driver.browser.remove_user_context(user_context)192193def test_add_cookie(self, driver, pages, webserver):194"""Test adding a cookie."""195assert_no_cookies_are_present(driver)196197key = generate_unique_key()198value = "foo"199200parameters = PartialCookie(key, BytesValue(BytesValue.TYPE_STRING, value), webserver.host)201assert_cookie_is_not_present_with_name(driver, key)202203# Test204driver.storage.set_cookie(cookie=parameters)205206# Verify207assert_cookie_has_value(driver, key, value)208driver.get(pages.url("simpleTest.html"))209assert_cookie_has_value(driver, key, value)210211@pytest.mark.xfail_chrome212@pytest.mark.xfail_edge213def test_add_and_get_cookie(self, driver, pages, webserver):214"""Test adding and getting a cookie with all parameters."""215assert_no_cookies_are_present(driver)216217value = BytesValue(BytesValue.TYPE_STRING, "cod")218domain = webserver.host219220expiry = int(time.time() + 3600)221222path = "/simpleTest.html"223224cookie = PartialCookie(225"fish", value, domain, path=path, http_only=True, secure=False, same_site=SameSite.LAX, expiry=expiry226)227228# Test229driver.storage.set_cookie(cookie=cookie)230231driver.get(pages.url("simpleTest.html"))232233cookie_filter = CookieFilter(234name="fish",235value=value,236domain=domain,237path=path,238http_only=True,239secure=False,240same_site=SameSite.LAX,241expiry=expiry,242)243244descriptor = BrowsingContextPartitionDescriptor(driver.current_window_handle)245246result = driver.storage.get_cookies(filter=cookie_filter, partition=descriptor)247key = result.partition_key248249# Verify250assert len(result.cookies) > 0251result_cookie = result.cookies[0]252253assert result_cookie.name == "fish"254assert result_cookie.value.value == value.value255assert result_cookie.domain == domain256assert result_cookie.path == path257assert result_cookie.http_only is True258assert result_cookie.secure is False259assert result_cookie.same_site == SameSite.LAX260assert result_cookie.expiry == expiry261assert key.source_origin is not None262assert key.user_context is not None263assert key.user_context == "default"264265def test_get_all_cookies(self, driver, pages, webserver):266"""Test getting all cookies."""267assert_no_cookies_are_present(driver)268269key1 = generate_unique_key()270key2 = generate_unique_key()271272assert_cookie_is_not_present_with_name(driver, key1)273assert_cookie_is_not_present_with_name(driver, key2)274275# Test276params = CookieFilter()277result = driver.storage.get_cookies(filter=params)278279count_before = len(result.cookies)280281driver.add_cookie({"name": key1, "value": "value"})282driver.add_cookie({"name": key2, "value": "value"})283284driver.get(pages.url("simpleTest.html"))285result = driver.storage.get_cookies(filter=params)286287# Verify288assert len(result.cookies) == count_before + 2289cookie_names = [cookie.name for cookie in result.cookies]290assert key1 in cookie_names291assert key2 in cookie_names292293def test_delete_all_cookies(self, driver, pages, webserver):294"""Test deleting all cookies."""295assert_no_cookies_are_present(driver)296297driver.add_cookie({"name": "foo", "value": "set"})298assert_some_cookies_are_present(driver)299300# Test301driver.storage.delete_cookies(filter=CookieFilter())302303# Verify304assert_no_cookies_are_present(driver)305306driver.get(pages.url("simpleTest.html"))307assert_no_cookies_are_present(driver)308309def test_delete_cookie_with_name(self, driver, pages, webserver):310"""Test deleting a cookie with a specific name."""311assert_no_cookies_are_present(driver)312313key1 = generate_unique_key()314key2 = generate_unique_key()315316driver.add_cookie({"name": key1, "value": "set"})317driver.add_cookie({"name": key2, "value": "set"})318319assert_cookie_is_present_with_name(driver, key1)320assert_cookie_is_present_with_name(driver, key2)321322# Test323driver.storage.delete_cookies(filter=CookieFilter(name=key1))324325# Verify326assert_cookie_is_not_present_with_name(driver, key1)327assert_cookie_is_present_with_name(driver, key2)328329driver.get(pages.url("simpleTest.html"))330assert_cookie_is_not_present_with_name(driver, key1)331assert_cookie_is_present_with_name(driver, key2)332333def test_add_cookies_with_different_paths(self, driver, pages, webserver):334"""Test adding cookies with different paths that are related to ours."""335assert_no_cookies_are_present(driver)336337cookie1 = PartialCookie(338"fish", BytesValue(BytesValue.TYPE_STRING, "cod"), webserver.host, path="/simpleTest.html"339)340341cookie2 = PartialCookie("planet", BytesValue(BytesValue.TYPE_STRING, "earth"), webserver.host, path="/")342343# Test344driver.storage.set_cookie(cookie=cookie1)345driver.storage.set_cookie(cookie=cookie2)346347driver.get(pages.url("simpleTest.html"))348349# Verify350assert_cookie_is_present_with_name(driver, "fish")351assert_cookie_is_present_with_name(driver, "planet")352353driver.get(pages.url("formPage.html"))354assert_cookie_is_not_present_with_name(driver, "fish")355356357