Path: blob/trunk/py/test/selenium/webdriver/common/bidi_permissions_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 pytest1819from selenium.webdriver.common.bidi.permissions import PermissionDescriptor, PermissionState20from selenium.webdriver.common.window import WindowTypes212223def get_origin(driver):24"""Get the current window origin."""25return driver.execute_script("return window.location.origin;")262728def get_geolocation_permission(driver):29"""Get the geolocation permission state."""30script = """31const callback = arguments[arguments.length - 1];32navigator.permissions.query({ name: 'geolocation' }).then(permission => {33callback(permission.state);34}).catch(error => {35callback(null);36});37"""38return driver.execute_async_script(script)394041def test_permissions_initialized(driver):42"""Test that the permissions module is initialized properly."""43assert driver.permissions is not None444546def test_can_set_permission_to_granted(driver, pages):47"""Test setting permission to granted state."""48pages.load("blank.html")4950origin = get_origin(driver)5152# Set geolocation permission to granted53driver.permissions.set_permission("geolocation", PermissionState.GRANTED, origin)5455result = get_geolocation_permission(driver)56assert result == PermissionState.GRANTED575859def test_can_set_permission_to_denied(driver, pages):60"""Test setting permission to denied state."""61pages.load("blank.html")6263origin = get_origin(driver)6465# Set geolocation permission to denied66driver.permissions.set_permission("geolocation", PermissionState.DENIED, origin)6768result = get_geolocation_permission(driver)69assert result == PermissionState.DENIED707172def test_can_set_permission_to_prompt(driver, pages):73"""Test setting permission to prompt state."""74pages.load("blank.html")7576origin = get_origin(driver)7778# First set to denied, then to prompt since most of the time the default state is prompt79driver.permissions.set_permission("geolocation", PermissionState.DENIED, origin)80driver.permissions.set_permission("geolocation", PermissionState.PROMPT, origin)8182result = get_geolocation_permission(driver)83assert result == PermissionState.PROMPT848586def test_can_set_permission_for_user_context(driver, pages):87"""Test setting permission for a specific user context."""88# Create a user context89user_context = driver.browser.create_user_context()9091context_id = driver.browsing_context.create(type=WindowTypes.TAB, user_context=user_context)9293# Navigate both contexts to the same page94pages.load("blank.html")95original_window = driver.current_window_handle96driver.switch_to.window(context_id)97pages.load("blank.html")9899origin = get_origin(driver)100101# Get original permission states102driver.switch_to.window(original_window)103original_permission = get_geolocation_permission(driver)104105driver.switch_to.window(context_id)106107# Set permission only for the user context using PermissionDescriptor108descriptor = PermissionDescriptor("geolocation")109driver.permissions.set_permission(descriptor, PermissionState.GRANTED, origin, user_context)110111# Check that the original window's permission hasn't changed112driver.switch_to.window(original_window)113updated_original_permission = get_geolocation_permission(driver)114assert updated_original_permission == original_permission115116# Check that the new context's permission was updated117driver.switch_to.window(context_id)118updated_new_context_permission = get_geolocation_permission(driver)119assert updated_new_context_permission == PermissionState.GRANTED120121driver.browsing_context.close(context_id)122driver.browser.remove_user_context(user_context)123124125def test_invalid_permission_state_raises_error(driver, pages):126"""Test that invalid permission state raises ValueError."""127pages.load("blank.html")128origin = get_origin(driver)129130# set permission using PermissionDescriptor131descriptor = PermissionDescriptor("geolocation")132133with pytest.raises(ValueError, match="Invalid permission state"):134driver.permissions.set_permission(descriptor, "invalid_state", origin)135136137def test_permission_states_constants():138"""Test that permission state constants are correctly defined."""139assert PermissionState.GRANTED == "granted"140assert PermissionState.DENIED == "denied"141assert PermissionState.PROMPT == "prompt"142143144