initial commit
This commit is contained in:
+134
@@ -0,0 +1,134 @@
|
||||
# Licensed to the Software Freedom Conservancy (SFC) under one
|
||||
# or more contributor license agreements. See the NOTICE file
|
||||
# distributed with this work for additional information
|
||||
# regarding copyright ownership. The SFC licenses this file
|
||||
# to you under the Apache License, Version 2.0 (the
|
||||
# "License"); you may not use this file except in compliance
|
||||
# with the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing,
|
||||
# software distributed under the License is distributed on an
|
||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
|
||||
from selenium.webdriver.common.bidi.common import command_builder
|
||||
|
||||
|
||||
class UserPromptHandlerType:
|
||||
"""Represents the behavior of the user prompt handler."""
|
||||
|
||||
ACCEPT = "accept"
|
||||
DISMISS = "dismiss"
|
||||
IGNORE = "ignore"
|
||||
|
||||
VALID_TYPES = {ACCEPT, DISMISS, IGNORE}
|
||||
|
||||
|
||||
class UserPromptHandler:
|
||||
"""Represents the configuration of the user prompt handler."""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
alert: str | None = None,
|
||||
before_unload: str | None = None,
|
||||
confirm: str | None = None,
|
||||
default: str | None = None,
|
||||
file: str | None = None,
|
||||
prompt: str | None = None,
|
||||
):
|
||||
"""Initialize UserPromptHandler.
|
||||
|
||||
Args:
|
||||
alert: Handler type for alert prompts.
|
||||
before_unload: Handler type for beforeUnload prompts.
|
||||
confirm: Handler type for confirm prompts.
|
||||
default: Default handler type for all prompts.
|
||||
file: Handler type for file picker prompts.
|
||||
prompt: Handler type for prompt dialogs.
|
||||
|
||||
Raises:
|
||||
ValueError: If any handler type is not valid.
|
||||
"""
|
||||
for field_name, value in [
|
||||
("alert", alert),
|
||||
("before_unload", before_unload),
|
||||
("confirm", confirm),
|
||||
("default", default),
|
||||
("file", file),
|
||||
("prompt", prompt),
|
||||
]:
|
||||
if value is not None and value not in UserPromptHandlerType.VALID_TYPES:
|
||||
raise ValueError(
|
||||
f"Invalid {field_name} handler type: {value}. Must be one of {UserPromptHandlerType.VALID_TYPES}"
|
||||
)
|
||||
|
||||
self.alert = alert
|
||||
self.before_unload = before_unload
|
||||
self.confirm = confirm
|
||||
self.default = default
|
||||
self.file = file
|
||||
self.prompt = prompt
|
||||
|
||||
def to_dict(self) -> dict[str, str]:
|
||||
"""Convert the UserPromptHandler to a dictionary for BiDi protocol.
|
||||
|
||||
Returns:
|
||||
Dictionary representation suitable for BiDi protocol.
|
||||
"""
|
||||
field_mapping = {
|
||||
"alert": "alert",
|
||||
"before_unload": "beforeUnload",
|
||||
"confirm": "confirm",
|
||||
"default": "default",
|
||||
"file": "file",
|
||||
"prompt": "prompt",
|
||||
}
|
||||
|
||||
result = {}
|
||||
for attr_name, dict_key in field_mapping.items():
|
||||
value = getattr(self, attr_name)
|
||||
if value is not None:
|
||||
result[dict_key] = value
|
||||
return result
|
||||
|
||||
|
||||
class Session:
|
||||
def __init__(self, conn):
|
||||
self.conn = conn
|
||||
|
||||
def subscribe(self, *events, browsing_contexts=None):
|
||||
params = {
|
||||
"events": events,
|
||||
}
|
||||
if browsing_contexts is None:
|
||||
browsing_contexts = []
|
||||
if browsing_contexts:
|
||||
params["browsingContexts"] = browsing_contexts
|
||||
return command_builder("session.subscribe", params)
|
||||
|
||||
def unsubscribe(self, *events, browsing_contexts=None):
|
||||
params = {
|
||||
"events": events,
|
||||
}
|
||||
if browsing_contexts is None:
|
||||
browsing_contexts = []
|
||||
if browsing_contexts:
|
||||
params["browsingContexts"] = browsing_contexts
|
||||
return command_builder("session.unsubscribe", params)
|
||||
|
||||
def status(self):
|
||||
"""The session.status command returns information about the remote end's readiness.
|
||||
|
||||
Returns information about the remote end's readiness to create new sessions
|
||||
and may include implementation-specific metadata.
|
||||
|
||||
Returns:
|
||||
Dictionary containing the ready state (bool), message (str) and metadata.
|
||||
"""
|
||||
cmd = command_builder("session.status", {})
|
||||
return self.conn.execute(cmd)
|
||||
Reference in New Issue
Block a user