seleniumbase 4.32.9__py3-none-any.whl → 4.32.10__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- seleniumbase/__version__.py +1 -1
- seleniumbase/core/browser_launcher.py +85 -40
- seleniumbase/core/sb_cdp.py +399 -53
- seleniumbase/core/sb_driver.py +16 -0
- seleniumbase/fixtures/base_case.py +59 -11
- seleniumbase/fixtures/constants.py +1 -0
- seleniumbase/fixtures/js_utils.py +1 -5
- seleniumbase/fixtures/page_actions.py +0 -2
- seleniumbase/fixtures/shared_utils.py +14 -3
- seleniumbase/undetected/cdp_driver/element.py +18 -2
- {seleniumbase-4.32.9.dist-info → seleniumbase-4.32.10.dist-info}/METADATA +5 -5
- {seleniumbase-4.32.9.dist-info → seleniumbase-4.32.10.dist-info}/RECORD +16 -16
- {seleniumbase-4.32.9.dist-info → seleniumbase-4.32.10.dist-info}/WHEEL +1 -1
- {seleniumbase-4.32.9.dist-info → seleniumbase-4.32.10.dist-info}/LICENSE +0 -0
- {seleniumbase-4.32.9.dist-info → seleniumbase-4.32.10.dist-info}/entry_points.txt +0 -0
- {seleniumbase-4.32.9.dist-info → seleniumbase-4.32.10.dist-info}/top_level.txt +0 -0
seleniumbase/core/sb_driver.py
CHANGED
@@ -198,6 +198,11 @@ class DriverMethods():
|
|
198
198
|
In CDP Mode, the CDP-Driver controls the web browser.
|
199
199
|
The CDP-Driver can be connected while WebDriver isn't.
|
200
200
|
"""
|
201
|
+
if shared_utils.is_windows():
|
202
|
+
return (
|
203
|
+
not hasattr(self.driver, "_is_connected")
|
204
|
+
or self.driver._is_connected
|
205
|
+
)
|
201
206
|
try:
|
202
207
|
self.driver.window_handles
|
203
208
|
return True
|
@@ -238,6 +243,17 @@ class DriverMethods():
|
|
238
243
|
return js_utils.get_user_agent(self.driver, *args, **kwargs)
|
239
244
|
|
240
245
|
def highlight(self, *args, **kwargs):
|
246
|
+
if self.__is_cdp_swap_needed():
|
247
|
+
selector = None
|
248
|
+
if "selector" in kwargs:
|
249
|
+
selector = kwargs["selector"]
|
250
|
+
else:
|
251
|
+
selector = args[0]
|
252
|
+
if ":contains(" not in selector:
|
253
|
+
self.driver.cdp.highlight(selector)
|
254
|
+
return
|
255
|
+
else:
|
256
|
+
self.driver.connect()
|
241
257
|
if "scroll" in kwargs:
|
242
258
|
kwargs.pop("scroll")
|
243
259
|
w_args = kwargs.copy()
|
@@ -1592,6 +1592,9 @@ class BaseCase(unittest.TestCase):
|
|
1592
1592
|
def click_link_text(self, link_text, timeout=None):
|
1593
1593
|
"""This method clicks link text on a page."""
|
1594
1594
|
self.__check_scope()
|
1595
|
+
if self.__is_cdp_swap_needed():
|
1596
|
+
self.cdp.find_element(link_text).click()
|
1597
|
+
return
|
1595
1598
|
self.__skip_if_esc()
|
1596
1599
|
if not timeout:
|
1597
1600
|
timeout = settings.SMALL_TIMEOUT
|
@@ -2197,6 +2200,9 @@ class BaseCase(unittest.TestCase):
|
|
2197
2200
|
if self.timeout_multiplier and timeout == settings.SMALL_TIMEOUT:
|
2198
2201
|
timeout = self.__get_new_timeout(timeout)
|
2199
2202
|
selector, by = self.__recalculate_selector(selector, by)
|
2203
|
+
if self.__is_cdp_swap_needed():
|
2204
|
+
self.cdp.click_visible_elements(selector)
|
2205
|
+
return
|
2200
2206
|
self.wait_for_ready_state_complete()
|
2201
2207
|
if self.__needs_minimum_wait():
|
2202
2208
|
time.sleep(0.12)
|
@@ -2637,6 +2643,9 @@ class BaseCase(unittest.TestCase):
|
|
2637
2643
|
original_selector = selector
|
2638
2644
|
original_by = by
|
2639
2645
|
selector, by = self.__recalculate_selector(selector, by)
|
2646
|
+
if self.__is_cdp_swap_needed():
|
2647
|
+
self.cdp.gui_hover_element(selector)
|
2648
|
+
return
|
2640
2649
|
self.wait_for_element_visible(
|
2641
2650
|
original_selector, by=original_by, timeout=timeout
|
2642
2651
|
)
|
@@ -2679,6 +2688,9 @@ class BaseCase(unittest.TestCase):
|
|
2679
2688
|
click_selector, click_by = self.__recalculate_selector(
|
2680
2689
|
click_selector, click_by
|
2681
2690
|
)
|
2691
|
+
if self.__is_cdp_swap_needed():
|
2692
|
+
self.cdp.gui_hover_and_click(hover_selector, click_selector)
|
2693
|
+
return
|
2682
2694
|
dropdown_element = self.wait_for_element_visible(
|
2683
2695
|
original_selector, by=original_by, timeout=timeout
|
2684
2696
|
)
|
@@ -3105,6 +3117,9 @@ class BaseCase(unittest.TestCase):
|
|
3105
3117
|
timeout = settings.SMALL_TIMEOUT
|
3106
3118
|
if self.timeout_multiplier and timeout == settings.SMALL_TIMEOUT:
|
3107
3119
|
timeout = self.__get_new_timeout(timeout)
|
3120
|
+
if self.__is_cdp_swap_needed():
|
3121
|
+
self.cdp.select_option_by_text(dropdown_selector, option)
|
3122
|
+
return
|
3108
3123
|
self.__select_option(
|
3109
3124
|
dropdown_selector,
|
3110
3125
|
option,
|
@@ -3419,8 +3434,8 @@ class BaseCase(unittest.TestCase):
|
|
3419
3434
|
if self.__is_cdp_swap_needed():
|
3420
3435
|
return self.cdp.get_gui_element_center(selector)
|
3421
3436
|
element_rect = self.get_gui_element_rect(selector, by=by)
|
3422
|
-
x =
|
3423
|
-
y =
|
3437
|
+
x = element_rect["x"] + (element_rect["width"] / 2.0) + 0.5
|
3438
|
+
y = element_rect["y"] + (element_rect["height"] / 2.0) + 0.5
|
3424
3439
|
return (x, y)
|
3425
3440
|
|
3426
3441
|
def get_window_rect(self):
|
@@ -5959,6 +5974,9 @@ class BaseCase(unittest.TestCase):
|
|
5959
5974
|
scroll - the option to scroll to the element first (Default: True)
|
5960
5975
|
timeout - the time to wait for the element to appear """
|
5961
5976
|
self.__check_scope()
|
5977
|
+
if self.__is_cdp_swap_needed() and ":contains(" not in selector:
|
5978
|
+
self.cdp.highlight(selector)
|
5979
|
+
return
|
5962
5980
|
self._check_browser()
|
5963
5981
|
self.__skip_if_esc()
|
5964
5982
|
if isinstance(selector, WebElement):
|
@@ -6126,6 +6144,9 @@ class BaseCase(unittest.TestCase):
|
|
6126
6144
|
original_selector = selector
|
6127
6145
|
original_by = by
|
6128
6146
|
selector, by = self.__recalculate_selector(selector, by)
|
6147
|
+
if self.__is_cdp_swap_needed() and ":contains(" not in selector:
|
6148
|
+
self.cdp.scroll_into_view(selector)
|
6149
|
+
return
|
6129
6150
|
element = self.wait_for_element_visible(
|
6130
6151
|
original_selector, by=original_by, timeout=timeout
|
6131
6152
|
)
|
@@ -6172,24 +6193,36 @@ class BaseCase(unittest.TestCase):
|
|
6172
6193
|
def scroll_to_top(self):
|
6173
6194
|
"""Scroll to the top of the page."""
|
6174
6195
|
self.__check_scope()
|
6196
|
+
if self.__is_cdp_swap_needed():
|
6197
|
+
self.cdp.scroll_to_top()
|
6198
|
+
return
|
6175
6199
|
scroll_script = "window.scrollTo(0, 0);"
|
6176
|
-
|
6200
|
+
with suppress(Exception):
|
6177
6201
|
self.execute_script(scroll_script)
|
6178
6202
|
time.sleep(0.012)
|
6179
|
-
return True
|
6180
|
-
except Exception:
|
6181
|
-
return False
|
6182
6203
|
|
6183
6204
|
def scroll_to_bottom(self):
|
6184
6205
|
"""Scroll to the bottom of the page."""
|
6185
6206
|
self.__check_scope()
|
6207
|
+
if self.__is_cdp_swap_needed():
|
6208
|
+
self.cdp.scroll_to_bottom()
|
6209
|
+
return
|
6186
6210
|
scroll_script = "window.scrollTo(0, 10000);"
|
6187
|
-
|
6211
|
+
with suppress(Exception):
|
6212
|
+
self.execute_script(scroll_script)
|
6213
|
+
time.sleep(0.012)
|
6214
|
+
|
6215
|
+
def scroll_to_y(self, y):
|
6216
|
+
"""Scroll to y position on the page."""
|
6217
|
+
self.__check_scope()
|
6218
|
+
y = int(y)
|
6219
|
+
if self.__is_cdp_swap_needed():
|
6220
|
+
self.cdp.scroll_to_y(y)
|
6221
|
+
return
|
6222
|
+
scroll_script = "window.scrollTo(0, %s);" % y
|
6223
|
+
with suppress(Exception):
|
6188
6224
|
self.execute_script(scroll_script)
|
6189
6225
|
time.sleep(0.012)
|
6190
|
-
return True
|
6191
|
-
except Exception:
|
6192
|
-
return False
|
6193
6226
|
|
6194
6227
|
def click_xpath(self, xpath):
|
6195
6228
|
"""Technically, self.click() automatically detects xpath selectors,
|
@@ -7676,6 +7709,9 @@ class BaseCase(unittest.TestCase):
|
|
7676
7709
|
but then the title switches over to the actual page title.
|
7677
7710
|
In Recorder Mode, this assertion is skipped because the Recorder
|
7678
7711
|
changes the page title to the selector of the hovered element."""
|
7712
|
+
if self.__is_cdp_swap_needed():
|
7713
|
+
self.cdp.assert_title(title)
|
7714
|
+
return
|
7679
7715
|
self.wait_for_ready_state_complete()
|
7680
7716
|
expected = title.strip()
|
7681
7717
|
actual = self.get_page_title().strip()
|
@@ -8166,7 +8202,7 @@ class BaseCase(unittest.TestCase):
|
|
8166
8202
|
timeout = self.__get_new_timeout(timeout)
|
8167
8203
|
selector, by = self.__recalculate_selector(selector, by, xp_ok=False)
|
8168
8204
|
if self.__is_cdp_swap_needed():
|
8169
|
-
self.cdp.
|
8205
|
+
self.cdp.set_value(selector, text)
|
8170
8206
|
return
|
8171
8207
|
self.wait_for_ready_state_complete()
|
8172
8208
|
self.wait_for_element_present(selector, by=by, timeout=timeout)
|
@@ -8932,6 +8968,9 @@ class BaseCase(unittest.TestCase):
|
|
8932
8968
|
timeout = self.__get_new_timeout(timeout)
|
8933
8969
|
original_selector = selector
|
8934
8970
|
selector, by = self.__recalculate_selector(selector, by)
|
8971
|
+
if self.__is_cdp_swap_needed():
|
8972
|
+
self.cdp.assert_element_absent(selector)
|
8973
|
+
return True
|
8935
8974
|
return page_actions.wait_for_element_absent(
|
8936
8975
|
self.driver,
|
8937
8976
|
selector,
|
@@ -9966,6 +10005,9 @@ class BaseCase(unittest.TestCase):
|
|
9966
10005
|
timeout = settings.SMALL_TIMEOUT
|
9967
10006
|
if self.timeout_multiplier and timeout == settings.SMALL_TIMEOUT:
|
9968
10007
|
timeout = self.__get_new_timeout(timeout)
|
10008
|
+
if self.__is_cdp_swap_needed():
|
10009
|
+
self.cdp.find_element(link_text)
|
10010
|
+
return
|
9969
10011
|
self.wait_for_link_text_visible(link_text, timeout=timeout)
|
9970
10012
|
if self.demo_mode:
|
9971
10013
|
a_t = "ASSERT LINK TEXT"
|
@@ -10065,6 +10107,9 @@ class BaseCase(unittest.TestCase):
|
|
10065
10107
|
timeout = settings.SMALL_TIMEOUT
|
10066
10108
|
if self.timeout_multiplier and timeout == settings.SMALL_TIMEOUT:
|
10067
10109
|
timeout = self.__get_new_timeout(timeout)
|
10110
|
+
if self.__is_cdp_swap_needed():
|
10111
|
+
self.cdp.assert_element_absent(selector)
|
10112
|
+
return True
|
10068
10113
|
self.wait_for_element_absent(selector, by=by, timeout=timeout)
|
10069
10114
|
return True
|
10070
10115
|
|
@@ -10083,6 +10128,9 @@ class BaseCase(unittest.TestCase):
|
|
10083
10128
|
timeout = self.__get_new_timeout(timeout)
|
10084
10129
|
original_selector = selector
|
10085
10130
|
selector, by = self.__recalculate_selector(selector, by)
|
10131
|
+
if self.__is_cdp_swap_needed():
|
10132
|
+
self.cdp.assert_element_not_visible(selector)
|
10133
|
+
return True
|
10086
10134
|
return page_actions.wait_for_element_not_visible(
|
10087
10135
|
self.driver,
|
10088
10136
|
selector,
|
@@ -10,6 +10,7 @@ from seleniumbase import config as sb_config
|
|
10
10
|
from seleniumbase.config import settings
|
11
11
|
from seleniumbase.fixtures import constants
|
12
12
|
from seleniumbase.fixtures import css_to_xpath
|
13
|
+
from seleniumbase.fixtures import shared_utils
|
13
14
|
from seleniumbase.fixtures import xpath_to_css
|
14
15
|
|
15
16
|
|
@@ -24,9 +25,6 @@ def wait_for_ready_state_complete(driver, timeout=settings.LARGE_TIMEOUT):
|
|
24
25
|
(Previously, tests would fail immediately if exceeding the timeout.)"""
|
25
26
|
if hasattr(settings, "SKIP_JS_WAITS") and settings.SKIP_JS_WAITS:
|
26
27
|
return
|
27
|
-
if sb_config.time_limit and not sb_config.recorder_mode:
|
28
|
-
from seleniumbase.fixtures import shared_utils
|
29
|
-
|
30
28
|
start_ms = time.time() * 1000.0
|
31
29
|
stop_ms = start_ms + (timeout * 1000.0)
|
32
30
|
for x in range(int(timeout * 10)):
|
@@ -243,8 +241,6 @@ def escape_quotes_if_needed(string):
|
|
243
241
|
def is_in_frame(driver):
|
244
242
|
# Returns True if the driver has switched to a frame.
|
245
243
|
# Returns False if the driver was on default content.
|
246
|
-
from seleniumbase.fixtures import shared_utils
|
247
|
-
|
248
244
|
if shared_utils.is_cdp_swap_needed(driver):
|
249
245
|
return False
|
250
246
|
in_basic_frame = driver.execute_script(
|
@@ -1555,8 +1555,6 @@ def _reconnect_if_disconnected(driver):
|
|
1555
1555
|
if (
|
1556
1556
|
hasattr(driver, "_is_using_uc")
|
1557
1557
|
and driver._is_using_uc
|
1558
|
-
and hasattr(driver, "_is_connected")
|
1559
|
-
and not driver._is_connected
|
1560
1558
|
and hasattr(driver, "is_connected")
|
1561
1559
|
and not driver.is_connected()
|
1562
1560
|
):
|
@@ -84,6 +84,17 @@ def fix_url_as_needed(url):
|
|
84
84
|
return url
|
85
85
|
|
86
86
|
|
87
|
+
def reconnect_if_disconnected(driver):
|
88
|
+
if (
|
89
|
+
hasattr(driver, "_is_using_uc")
|
90
|
+
and driver._is_using_uc
|
91
|
+
and hasattr(driver, "is_connected")
|
92
|
+
and not driver.is_connected()
|
93
|
+
):
|
94
|
+
with suppress(Exception):
|
95
|
+
driver.connect()
|
96
|
+
|
97
|
+
|
87
98
|
def is_cdp_swap_needed(driver):
|
88
99
|
"""
|
89
100
|
When someone is using CDP Mode with a disconnected webdriver,
|
@@ -93,9 +104,9 @@ def is_cdp_swap_needed(driver):
|
|
93
104
|
For other webdriver methods, SeleniumBase will reconnect first.
|
94
105
|
"""
|
95
106
|
return (
|
96
|
-
driver
|
97
|
-
|
98
|
-
|
107
|
+
hasattr(driver, "is_cdp_mode_active")
|
108
|
+
and driver.is_cdp_mode_active()
|
109
|
+
and hasattr(driver, "is_connected")
|
99
110
|
and not driver.is_connected()
|
100
111
|
)
|
101
112
|
|
@@ -5,6 +5,7 @@ import logging
|
|
5
5
|
import pathlib
|
6
6
|
import secrets
|
7
7
|
import typing
|
8
|
+
from contextlib import suppress
|
8
9
|
from . import cdp_util as util
|
9
10
|
from ._contradict import ContraDict
|
10
11
|
from .config import PathLike
|
@@ -768,6 +769,11 @@ class Element:
|
|
768
769
|
Gets the text contents of this element and child nodes, concatenated.
|
769
770
|
Note: This includes text in the form of script content, (text nodes).
|
770
771
|
"""
|
772
|
+
with suppress(Exception):
|
773
|
+
if self.node.node_name.lower() in ["input", "textarea"]:
|
774
|
+
input_node = self.node.shadow_roots[0].children[0].children[0]
|
775
|
+
if input_node:
|
776
|
+
return input_node.node_value
|
771
777
|
text_nodes = util.filter_recurse_all(
|
772
778
|
self.node, lambda n: n.node_type == 3
|
773
779
|
)
|
@@ -776,6 +782,11 @@ class Element:
|
|
776
782
|
@property
|
777
783
|
def text_all(self):
|
778
784
|
"""Same as text(). Kept for backwards compatibility."""
|
785
|
+
with suppress(Exception):
|
786
|
+
if self.node.node_name.lower() in ["input", "textarea"]:
|
787
|
+
input_node = self.node.shadow_roots[0].children[0].children[0]
|
788
|
+
if input_node:
|
789
|
+
return input_node.node_value
|
779
790
|
text_nodes = util.filter_recurse_all(
|
780
791
|
self.node, lambda n: n.node_type == 3
|
781
792
|
)
|
@@ -868,7 +879,11 @@ class Element:
|
|
868
879
|
path.write_bytes(data_bytes)
|
869
880
|
return str(path)
|
870
881
|
|
871
|
-
async def flash_async(
|
882
|
+
async def flash_async(
|
883
|
+
self,
|
884
|
+
duration: typing.Union[float, int] = 0.5,
|
885
|
+
color: typing.Optional[str] = "EE4488",
|
886
|
+
):
|
872
887
|
"""
|
873
888
|
Displays for a short time a red dot on the element.
|
874
889
|
(Only if the element itself is visible)
|
@@ -892,11 +907,12 @@ class Element:
|
|
892
907
|
style = (
|
893
908
|
"position:absolute;z-index:99999999;padding:0;margin:0;"
|
894
909
|
"left:{:.1f}px; top: {:.1f}px; opacity:0.7;"
|
895
|
-
"width:8px;height:8px;border-radius:50%;background:#
|
910
|
+
"width:8px;height:8px;border-radius:50%;background:#{};"
|
896
911
|
"animation:show-pointer-ani {:.2f}s ease 1;"
|
897
912
|
).format(
|
898
913
|
pos.center[0] - 4, # -4 to account for drawn circle itself (w,h)
|
899
914
|
pos.center[1] - 4,
|
915
|
+
color,
|
900
916
|
duration,
|
901
917
|
)
|
902
918
|
script = (
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: seleniumbase
|
3
|
-
Version: 4.32.
|
3
|
+
Version: 4.32.10
|
4
4
|
Summary: A complete web automation framework for end-to-end testing.
|
5
5
|
Home-page: https://github.com/seleniumbase/SeleniumBase
|
6
6
|
Author: Michael Mintz
|
@@ -67,7 +67,7 @@ Requires-Dist: certifi>=2024.8.30
|
|
67
67
|
Requires-Dist: exceptiongroup>=1.2.2
|
68
68
|
Requires-Dist: filelock>=3.16.1
|
69
69
|
Requires-Dist: fasteners>=0.19
|
70
|
-
Requires-Dist: mycdp>=1.0
|
70
|
+
Requires-Dist: mycdp>=1.1.0
|
71
71
|
Requires-Dist: pynose>=1.5.3
|
72
72
|
Requires-Dist: platformdirs>=4.3.6
|
73
73
|
Requires-Dist: typing-extensions>=4.12.2
|
@@ -117,9 +117,9 @@ Requires-Dist: pyreadline3>=3.5.3; platform_system == "Windows"
|
|
117
117
|
Requires-Dist: setuptools~=70.2; python_version < "3.10"
|
118
118
|
Requires-Dist: urllib3<2,>=1.26.20; python_version < "3.10"
|
119
119
|
Requires-Dist: websockets~=13.1; python_version < "3.9"
|
120
|
-
Requires-Dist: setuptools>=
|
120
|
+
Requires-Dist: setuptools>=75.5.0; python_version >= "3.10"
|
121
121
|
Requires-Dist: urllib3<2.3.0,>=1.26.20; python_version >= "3.10"
|
122
|
-
Requires-Dist: websockets>=14.
|
122
|
+
Requires-Dist: websockets>=14.1; python_version >= "3.9"
|
123
123
|
Provides-Extra: allure
|
124
124
|
Requires-Dist: allure-pytest>=2.13.5; extra == "allure"
|
125
125
|
Requires-Dist: allure-python-commons>=2.13.5; extra == "allure"
|
@@ -127,7 +127,7 @@ Requires-Dist: allure-behave>=2.13.5; extra == "allure"
|
|
127
127
|
Provides-Extra: coverage
|
128
128
|
Requires-Dist: coverage>=7.6.1; python_version < "3.9" and extra == "coverage"
|
129
129
|
Requires-Dist: pytest-cov>=5.0.0; python_version < "3.9" and extra == "coverage"
|
130
|
-
Requires-Dist: coverage>=7.6.
|
130
|
+
Requires-Dist: coverage>=7.6.5; python_version >= "3.9" and extra == "coverage"
|
131
131
|
Requires-Dist: pytest-cov>=6.0.0; python_version >= "3.9" and extra == "coverage"
|
132
132
|
Provides-Extra: flake8
|
133
133
|
Requires-Dist: mccabe==0.7.0; extra == "flake8"
|
@@ -3,7 +3,7 @@ sbase/__main__.py,sha256=G0bVB1-DM4PGwQ1KyOupaWCs4ePbChZNNWuX2htim5U,647
|
|
3
3
|
sbase/steps.py,sha256=bKT_u5bJkKzYWEuAXi9NVVRYYxQRCM1_YJUrNFFRVPY,42865
|
4
4
|
seleniumbase/__init__.py,sha256=OtJh8nGKL4xtZpw8KPqmn7Q6R-86t4cWUDyVF5MbMTo,2398
|
5
5
|
seleniumbase/__main__.py,sha256=dn1p6dgCchmcH1zzTzzQvFwwdQQqnTGH6ULV9m4hv24,654
|
6
|
-
seleniumbase/__version__.py,sha256=
|
6
|
+
seleniumbase/__version__.py,sha256=EprvPOPeyt2vgaXwlIQ3r-LOIidKOMXwSmL8ZGhDzGs,47
|
7
7
|
seleniumbase/behave/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
8
8
|
seleniumbase/behave/behave_helper.py,sha256=elkl8P9eLulRAioLstE9baYNM9N_PHBmAOcajX-pH_Y,24198
|
9
9
|
seleniumbase/behave/behave_sb.py,sha256=-hza7Nx2U41mSObYiPMi48v3JlPh3sJO3yzP0kqZ1Gk,59174
|
@@ -36,7 +36,7 @@ seleniumbase/console_scripts/sb_print.py,sha256=tNy-bMDgwHJO3bZxMpmo9weSE8uhbH0C
|
|
36
36
|
seleniumbase/console_scripts/sb_recorder.py,sha256=1oAA4wFzVboNhIFDwJLD3jgy9RuoavywKQG7R67bNZE,10908
|
37
37
|
seleniumbase/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
38
38
|
seleniumbase/core/application_manager.py,sha256=e_0sjtI8cjY5BNyZj1QBR0j6_oCScxGmSXYEpcYwuZE,576
|
39
|
-
seleniumbase/core/browser_launcher.py,sha256=
|
39
|
+
seleniumbase/core/browser_launcher.py,sha256=FkUH7Q1VdUuvL7IMnz3ajIX0Ii3wSN8D4_XjE40aoYw,219757
|
40
40
|
seleniumbase/core/capabilities_parser.py,sha256=meIS2uHapTCq2ldfNAToC7r0cKmZDRXuYNKExM1GHDY,6038
|
41
41
|
seleniumbase/core/colored_traceback.py,sha256=DrRWfg7XEnKcgY59Xj7Jdk09H-XqHYBSUpB-DiZt6iY,2020
|
42
42
|
seleniumbase/core/create_db_tables.sql,sha256=VWPtrdiW_HQ6yETHjqTu-VIrTwvd8I8o1NfBeaVSHpU,972
|
@@ -50,8 +50,8 @@ seleniumbase/core/proxy_helper.py,sha256=cXhu8ErK9Vjdm82RMaQj7hEq_yUWizSp6LyiD50
|
|
50
50
|
seleniumbase/core/recorder_helper.py,sha256=fNGjbapXmEsht54x1o6Igk198QdnPxDDnjUOzQxNhNQ,25055
|
51
51
|
seleniumbase/core/report_helper.py,sha256=AIl6Qava2yW1uSzbLpJBlPlYDz0KE-rVhogh8hsGWBo,12201
|
52
52
|
seleniumbase/core/s3_manager.py,sha256=bkeI8I4y19ebWuQG1oEZV5qJbotC6eN8vin31OCNWJk,3521
|
53
|
-
seleniumbase/core/sb_cdp.py,sha256=
|
54
|
-
seleniumbase/core/sb_driver.py,sha256
|
53
|
+
seleniumbase/core/sb_cdp.py,sha256=ZppRZe-YtJ_e_lUC9yfWg-LN5IL9mDEgTQixVZfVDDQ,60593
|
54
|
+
seleniumbase/core/sb_driver.py,sha256=xMgtvBitEMr73RkqgQLT-3IvkP6sh7cJv-caCUPoO-o,12179
|
55
55
|
seleniumbase/core/session_helper.py,sha256=s9zD3PVZEWVzG2h81cCUskbNWLfdjC_LwwQjKptHCak,558
|
56
56
|
seleniumbase/core/settings_parser.py,sha256=KokVXpCiGZhJ-D4Bo-hizPz5r-iefzWoiTANu9zNaq4,7504
|
57
57
|
seleniumbase/core/style_sheet.py,sha256=tPpJ1xl6Kuw425Z-3Y0OgVRLGXk_ciBDREZjXk_NuPE,11395
|
@@ -65,14 +65,14 @@ seleniumbase/extensions/disable_csp.zip,sha256=YMifIIgEBiLrEFrS1sfW4Exh4br1V4oK1
|
|
65
65
|
seleniumbase/extensions/recorder.zip,sha256=OOyzF-Ize2cSRu1CqhzSAq5vusI9hqLLd2OIApUHesI,11918
|
66
66
|
seleniumbase/extensions/sbase_ext.zip,sha256=3s1N8zrVaMz8RQEOIoBzC3KDjtmHwVZRvVsX25Odr_s,8175
|
67
67
|
seleniumbase/fixtures/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
68
|
-
seleniumbase/fixtures/base_case.py,sha256=
|
69
|
-
seleniumbase/fixtures/constants.py,sha256=
|
68
|
+
seleniumbase/fixtures/base_case.py,sha256=LHDJZlL0aRzi4XyIXrds0xl84_eFllI_jpEcE3zSj5o,713463
|
69
|
+
seleniumbase/fixtures/constants.py,sha256=HdNtH4rXT_wRpRCtj6jF2jZ5z_0Xs4nveKRXDg3bZZE,13649
|
70
70
|
seleniumbase/fixtures/css_to_xpath.py,sha256=9ouDB1xl4MJ2os6JOgTIAyHKOQfuxtxvXC3O5hSnEKA,1954
|
71
71
|
seleniumbase/fixtures/errors.py,sha256=KyxuEVx_e3MPhVrJfNIa_3ltMpbCFxfy_jxK8RFNTns,555
|
72
|
-
seleniumbase/fixtures/js_utils.py,sha256=
|
73
|
-
seleniumbase/fixtures/page_actions.py,sha256=
|
72
|
+
seleniumbase/fixtures/js_utils.py,sha256=2l4UY_zUBsMviRoJpLA0z3XxhGeLMWj0Mv07FUR_jzg,50939
|
73
|
+
seleniumbase/fixtures/page_actions.py,sha256=dbp63c-7asYZyd8aOu57Y3dxQQozp_VJsP5h74s1kBA,66552
|
74
74
|
seleniumbase/fixtures/page_utils.py,sha256=5m7iXpikLs80TJoRO6_gEfXE1AKeQgcH1aFbR8o1C9A,12034
|
75
|
-
seleniumbase/fixtures/shared_utils.py,sha256=
|
75
|
+
seleniumbase/fixtures/shared_utils.py,sha256=WbPb15IvIWzRtMInKG8DUzJ26UZU-PixdOwTCjXQirU,7545
|
76
76
|
seleniumbase/fixtures/unittest_helper.py,sha256=sfZ92rZeBAn_sF_yQ3I6_I7h3lyU5-cV_UMegBNoEm8,1294
|
77
77
|
seleniumbase/fixtures/words.py,sha256=FOA4mAYvl3EPVpBTvgvK6YwCL8BdlRCmed685kEe7Vg,7827
|
78
78
|
seleniumbase/fixtures/xpath_to_css.py,sha256=lML56k656fElXJ4NJF07r35FjctrbgQkXUotNk7A-as,8876
|
@@ -119,7 +119,7 @@ seleniumbase/undetected/cdp_driver/browser.py,sha256=mGmpWuR206yYJoBPTNslru8CbEp
|
|
119
119
|
seleniumbase/undetected/cdp_driver/cdp_util.py,sha256=Erfb62fzpvGr0QIIJOiqvGkyoyBakHOIwgbrQ7dqUgM,16625
|
120
120
|
seleniumbase/undetected/cdp_driver/config.py,sha256=Rjvde7V-XJ0ihZdTmOmHEVWSuDWm3SprQ3njg8SN3Go,12087
|
121
121
|
seleniumbase/undetected/cdp_driver/connection.py,sha256=sOTUGjbUqKA2hPvDcRCdqw1VQjVGJs7mbgVvzS7ldtE,23360
|
122
|
-
seleniumbase/undetected/cdp_driver/element.py,sha256=
|
122
|
+
seleniumbase/undetected/cdp_driver/element.py,sha256=wEHtuF9oiny7cb4QMMjdtD5Yf1z3WOs2_NHEWcscusM,40289
|
123
123
|
seleniumbase/undetected/cdp_driver/tab.py,sha256=wUNF8GHrbhaUqg57A9ZTYHKhNPjZIcOHwrz3pj1SAg0,50526
|
124
124
|
seleniumbase/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
125
125
|
seleniumbase/utilities/selenium_grid/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -135,9 +135,9 @@ seleniumbase/utilities/selenium_grid/start-grid-hub.bat,sha256=Ftq-GrAKRYH2ssDPr
|
|
135
135
|
seleniumbase/utilities/selenium_grid/start-grid-hub.sh,sha256=KADv0RUHONLL2_I443QFK8PryBpDmKn5Gy0s4o0vDSM,106
|
136
136
|
seleniumbase/utilities/selenium_ide/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
137
137
|
seleniumbase/utilities/selenium_ide/convert_ide.py,sha256=pZFnqEJQEKZPyNFjkLD29s2HPQgCrWW9XJWpCPhWOoM,31691
|
138
|
-
seleniumbase-4.32.
|
139
|
-
seleniumbase-4.32.
|
140
|
-
seleniumbase-4.32.
|
141
|
-
seleniumbase-4.32.
|
142
|
-
seleniumbase-4.32.
|
143
|
-
seleniumbase-4.32.
|
138
|
+
seleniumbase-4.32.10.dist-info/LICENSE,sha256=odSYtWibXBnQ1gBg6CnDZ82n8kLF_if5-2nbqnEyD8k,1085
|
139
|
+
seleniumbase-4.32.10.dist-info/METADATA,sha256=PBD6feJ0a7cOUVtkmkomDeGJJaKnkXfRY9zoKoW0aNs,86462
|
140
|
+
seleniumbase-4.32.10.dist-info/WHEEL,sha256=R06PA3UVYHThwHvxuRWMqaGcr-PuniXahwjmQRFMEkY,91
|
141
|
+
seleniumbase-4.32.10.dist-info/entry_points.txt,sha256=CNrh2EKNaHYEhO6pP1RJyVLB99LkDDYX7TnUK8xfjqk,623
|
142
|
+
seleniumbase-4.32.10.dist-info/top_level.txt,sha256=4N97aBOQ8ETCnDnokBsWb07lJfTaq3C1ZzYRxvLMxqU,19
|
143
|
+
seleniumbase-4.32.10.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|