Skip to content

Commit 4440ea0

Browse files
committed
[py]: repr for script keys, types and nicer error when unpinning unknown keys and unit tests
1 parent 95f0cba commit 4440ea0

2 files changed

Lines changed: 30 additions & 28 deletions

File tree

py/selenium/webdriver/remote/script_key.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,6 @@ def id(self):
2828

2929
def __eq__(self, other):
3030
return self._id == other
31+
32+
def __repr__(self) -> str:
33+
return f"ScriptKey(id={self.id})"

py/selenium/webdriver/remote/webdriver.py

Lines changed: 27 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -18,48 +18,42 @@
1818
"""The WebDriver implementation."""
1919
import contextlib
2020
import copy
21+
import pkgutil
2122
import types
2223
import typing
23-
from importlib import import_module
24-
25-
import pkgutil
26-
27-
from typing import Dict, List, Optional, Union
28-
2924
import warnings
30-
3125
from abc import ABCMeta
3226
from base64 import b64decode, urlsafe_b64encode
3327
from contextlib import asynccontextmanager, contextmanager
34-
35-
from .bidi_connection import BidiConnection
36-
from .command import Command
37-
from .errorhandler import ErrorHandler
38-
from .file_detector import FileDetector, LocalFileDetector
39-
from .mobile import Mobile
40-
from .remote_connection import RemoteConnection
41-
from .script_key import ScriptKey
42-
from .shadowroot import ShadowRoot
43-
from .switch_to import SwitchTo
44-
from .webelement import WebElement
28+
from importlib import import_module
29+
from typing import Dict, List, Optional, Union
4530

4631
from selenium.common.exceptions import (InvalidArgumentException,
4732
JavascriptException,
4833
WebDriverException,
4934
NoSuchCookieException,
5035
NoSuchElementException)
5136
from selenium.webdriver.common.by import By
37+
from selenium.webdriver.common.html5.application_cache import ApplicationCache
5238
from selenium.webdriver.common.options import BaseOptions
5339
from selenium.webdriver.common.print_page_options import PrintOptions
5440
from selenium.webdriver.common.timeouts import Timeouts
55-
from selenium.webdriver.common.html5.application_cache import ApplicationCache
56-
from selenium.webdriver.support.relative_locator import RelativeBy
5741
from selenium.webdriver.common.virtual_authenticator import (
5842
Credential,
5943
VirtualAuthenticatorOptions,
6044
required_virtual_authenticator
6145
)
62-
46+
from selenium.webdriver.support.relative_locator import RelativeBy
47+
from .bidi_connection import BidiConnection
48+
from .command import Command
49+
from .errorhandler import ErrorHandler
50+
from .file_detector import FileDetector, LocalFileDetector
51+
from .mobile import Mobile
52+
from .remote_connection import RemoteConnection
53+
from .script_key import ScriptKey
54+
from .shadowroot import ShadowRoot
55+
from .switch_to import SwitchTo
56+
from .webelement import WebElement
6357

6458
_W3C_CAPABILITY_NAMES = frozenset([
6559
'acceptInsecureCerts',
@@ -456,16 +450,21 @@ def title(self) -> str:
456450
"""
457451
return self.execute(Command.GET_TITLE).get("value", "")
458452

459-
def pin_script(self, script, script_key=None) -> ScriptKey:
460-
_script_key = ScriptKey(script_key)
461-
self.pinned_scripts[_script_key.id] = script
462-
return _script_key
453+
def pin_script(self, script: str, script_key=None) -> ScriptKey:
454+
"""Store common javascript scripts to be executed later by a unique hashable ID."""
455+
script_key_instance = ScriptKey(script_key)
456+
self.pinned_scripts[script_key_instance.id] = script
457+
return script_key_instance
463458

464-
def unpin(self, script_key) -> None:
465-
self.pinned_scripts.pop(script_key.id)
459+
def unpin(self, script_key: ScriptKey) -> None:
460+
"""Remove a pinned script from storage."""
461+
try:
462+
self.pinned_scripts.pop(script_key.id)
463+
except KeyError:
464+
raise KeyError(f"No script with key: {script_key} existed in {self.pinned_scripts}") from None
466465

467466
def get_pinned_scripts(self) -> List[str]:
468-
return list(self.pinned_scripts.keys())
467+
return list(self.pinned_scripts)
469468

470469
def execute_script(self, script, *args):
471470
"""

0 commit comments

Comments
 (0)