Skip to content

Commit e4d3db3

Browse files
navin772harsha509
andauthored
[py] fix type errors for log.py, chromium/options.py, websocket_connection.py and chrome/options.py (#14392)
* fix type errors for `log.py` * fix type errors for `chromium/options.py` Signed-off-by: Navin Chandra <[email protected]> * ignore mypy stub type error for `websocket_connection.py` Signed-off-by: Navin Chandra <[email protected]> * fix type errors for `chrome/options.py` Signed-off-by: Navin Chandra <[email protected]> * fix failing RBE tests due to `log.py` Signed-off-by: Navin Chandra <[email protected]> --------- Signed-off-by: Navin Chandra <[email protected]> Co-authored-by: Sri Harsha <[email protected]>
1 parent c3dd52e commit e4d3db3

File tree

4 files changed

+26
-15
lines changed

4 files changed

+26
-15
lines changed

py/selenium/webdriver/chrome/options.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ def default_capabilities(self) -> dict:
2828

2929
def enable_mobile(
3030
self,
31-
android_package: str = "com.android.chrome",
31+
android_package: Optional[str] = "com.android.chrome",
3232
android_activity: Optional[str] = None,
3333
device_serial: Optional[str] = None,
3434
) -> None:

py/selenium/webdriver/chromium/options.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@
1818
import base64
1919
import os
2020
from typing import BinaryIO
21+
from typing import Dict
2122
from typing import List
23+
from typing import Optional
2224
from typing import Union
2325

2426
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
@@ -30,11 +32,11 @@ class ChromiumOptions(ArgOptions):
3032

3133
def __init__(self) -> None:
3234
super().__init__()
33-
self._binary_location = ""
34-
self._extension_files = []
35-
self._extensions = []
36-
self._experimental_options = {}
37-
self._debugger_address = None
35+
self._binary_location: str = ""
36+
self._extension_files: List[str] = []
37+
self._extensions: List[str] = []
38+
self._experimental_options: Dict[str, Union[str, int, dict, List[str]]] = {}
39+
self._debugger_address: Optional[str] = None
3840

3941
@property
4042
def binary_location(self) -> str:
@@ -53,7 +55,7 @@ def binary_location(self, value: str) -> None:
5355
self._binary_location = value
5456

5557
@property
56-
def debugger_address(self) -> str:
58+
def debugger_address(self) -> Optional[str]:
5759
""":Returns: The address of the remote devtools instance."""
5860
return self._debugger_address
5961

py/selenium/webdriver/common/log.py

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@
1919
import pkgutil
2020
from contextlib import asynccontextmanager
2121
from importlib import import_module
22+
from typing import Any
23+
from typing import AsyncGenerator
24+
from typing import Dict
25+
from typing import Optional
2226

2327
from selenium.webdriver.common.by import By
2428

@@ -45,10 +49,14 @@ def __init__(self, driver, bidi_session) -> None:
4549
self.cdp = bidi_session.cdp
4650
self.devtools = bidi_session.devtools
4751
_pkg = ".".join(__name__.split(".")[:-1])
48-
self._mutation_listener_js = pkgutil.get_data(_pkg, "mutation-listener.js").decode("utf8").strip()
52+
# Ensure _mutation_listener_js is not None before decoding
53+
_mutation_listener_js_bytes: Optional[bytes] = pkgutil.get_data(_pkg, "mutation-listener.js")
54+
if _mutation_listener_js_bytes is None:
55+
raise ValueError("Failed to load mutation-listener.js")
56+
self._mutation_listener_js = _mutation_listener_js_bytes.decode("utf8").strip()
4957

5058
@asynccontextmanager
51-
async def mutation_events(self) -> dict:
59+
async def mutation_events(self) -> AsyncGenerator[Dict[str, Any], None]:
5260
"""Listen for mutation events and emit them as they are found.
5361
5462
:Usage:
@@ -76,12 +84,13 @@ async def mutation_events(self) -> dict:
7684
)
7785
self.driver.pin_script(self._mutation_listener_js, script_key)
7886
self.driver.execute_script(f"return {self._mutation_listener_js}")
79-
event = {}
87+
88+
event: Dict[str, Any] = {}
8089
async with runtime.wait_for(self.devtools.runtime.BindingCalled) as evnt:
8190
yield event
8291

8392
payload = json.loads(evnt.value.payload)
84-
elements: list = self.driver.find_elements(By.CSS_SELECTOR, f"*[data-__webdriver_id={payload['target']}")
93+
elements: list = self.driver.find_elements(By.CSS_SELECTOR, f"*[data-__webdriver_id={payload['target']}]")
8594
if not elements:
8695
elements.append(None)
8796
event["element"] = elements[0]
@@ -90,7 +99,7 @@ async def mutation_events(self) -> dict:
9099
event["old_value"] = payload["oldValue"]
91100

92101
@asynccontextmanager
93-
async def add_js_error_listener(self):
102+
async def add_js_error_listener(self) -> AsyncGenerator[Dict[str, Any], None]:
94103
"""Listen for JS errors and when the contextmanager exits check if
95104
there were JS Errors.
96105
@@ -114,7 +123,7 @@ async def add_js_error_listener(self):
114123
js_exception.exception_details = exception.value.exception_details
115124

116125
@asynccontextmanager
117-
async def add_listener(self, event_type) -> dict:
126+
async def add_listener(self, event_type) -> AsyncGenerator[Dict[str, Any], None]:
118127
"""Listen for certain events that are passed in.
119128
120129
:Args:
@@ -134,7 +143,7 @@ async def add_listener(self, event_type) -> dict:
134143
await session.execute(self.devtools.page.enable())
135144
session = self.cdp.get_session_context("runtime.enable")
136145
await session.execute(self.devtools.runtime.enable())
137-
console = {"message": None, "level": None}
146+
console: Dict[str, Any] = {"message": None, "level": None}
138147
async with session.wait_for(self.devtools.runtime.ConsoleAPICalled) as messages:
139148
yield console
140149

py/selenium/webdriver/remote/websocket_connection.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
from threading import Thread
2121
from time import sleep
2222

23-
from websocket import WebSocketApp
23+
from websocket import WebSocketApp # type: ignore
2424

2525
logger = logging.getLogger(__name__)
2626

0 commit comments

Comments
 (0)