seleniumbase 4.32.8__py3-none-any.whl → 4.32.10__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
@@ -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 = int(element_rect["x"]) + int(element_rect["width"] / 2) + 1
3423
- y = int(element_rect["y"]) + int(element_rect["height"] / 2) + 1
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
- try:
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
- try:
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.type(selector, text)
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,
@@ -376,6 +376,7 @@ class Mobile:
376
376
  class UC:
377
377
  RECONNECT_TIME = 2.4 # Seconds
378
378
  CDP_MODE_OPEN_WAIT = 0.9 # Seconds
379
+ EXTRA_WINDOWS_WAIT = 0.2 # Seconds
379
380
 
380
381
 
381
382
  class ValidBrowsers:
@@ -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.is_cdp_mode_active()
97
- # and hasattr(driver, "_is_connected")
98
- # and not driver._is_connected
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
 
@@ -550,11 +550,7 @@ def Driver(
550
550
  or uc_sub
551
551
  ):
552
552
  undetectable = True
553
- if (
554
- (undetectable or undetected or uc)
555
- and (uc_subprocess is None)
556
- and (uc_sub is None)
557
- ):
553
+ if undetectable or undetected or uc:
558
554
  uc_subprocess = True # Use UC as a subprocess by default.
559
555
  elif (
560
556
  "--undetectable" in sys_argv
@@ -608,11 +608,7 @@ def SB(
608
608
  or uc_sub
609
609
  ):
610
610
  undetectable = True
611
- if (
612
- (undetectable or undetected or uc)
613
- and (uc_subprocess is None)
614
- and (uc_sub is None)
615
- ):
611
+ if undetectable or undetected or uc:
616
612
  uc_subprocess = True # Use UC as a subprocess by default.
617
613
  elif (
618
614
  "--undetectable" in sys_argv
@@ -18,6 +18,7 @@ from typing import (
18
18
  TypeVar,
19
19
  )
20
20
  import websockets
21
+ from websockets.protocol import State
21
22
  from . import cdp_util as util
22
23
  import mycdp as cdp
23
24
  import mycdp.network
@@ -261,7 +262,7 @@ class Connection(metaclass=CantTouchThis):
261
262
  """
262
263
  Opens the websocket connection. Shouldn't be called manually by users.
263
264
  """
264
- if not self.websocket or self.websocket.closed:
265
+ if not self.websocket or self.websocket.state is State.CLOSED:
265
266
  try:
266
267
  self.websocket = await websockets.connect(
267
268
  self.websocket_url,
@@ -288,7 +289,7 @@ class Connection(metaclass=CantTouchThis):
288
289
  """
289
290
  Closes the websocket connection. Shouldn't be called manually by users.
290
291
  """
291
- if self.websocket and not self.websocket.closed:
292
+ if self.websocket and self.websocket.state is not State.CLOSED:
292
293
  if self.listener and self.listener.running:
293
294
  self.listener.cancel()
294
295
  self.enabled_domains.clear()
@@ -393,7 +394,7 @@ class Connection(metaclass=CantTouchThis):
393
394
  when multiple calls to connection.send() are made.
394
395
  """
395
396
  await self.aopen()
396
- if not self.websocket or self.closed:
397
+ if not self.websocket or self.websocket.state is State.CLOSED:
397
398
  return
398
399
  if self._owner:
399
400
  browser = self._owner
@@ -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(self, duration: typing.Union[float, int] = 0.5):
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:#EE4488;"
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.8
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
@@ -60,15 +60,14 @@ Requires-Python: >=3.8
60
60
  Description-Content-Type: text/markdown
61
61
  License-File: LICENSE
62
62
  Requires-Dist: pip>=24.2
63
- Requires-Dist: packaging>=24.1
64
- Requires-Dist: wheel>=0.44.0
63
+ Requires-Dist: packaging>=24.2
64
+ Requires-Dist: wheel>=0.45.0
65
65
  Requires-Dist: attrs>=24.2.0
66
66
  Requires-Dist: certifi>=2024.8.30
67
67
  Requires-Dist: exceptiongroup>=1.2.2
68
- Requires-Dist: websockets>=13.1
69
68
  Requires-Dist: filelock>=3.16.1
70
69
  Requires-Dist: fasteners>=0.19
71
- Requires-Dist: mycdp>=1.0.1
70
+ Requires-Dist: mycdp>=1.1.0
72
71
  Requires-Dist: pynose>=1.5.3
73
72
  Requires-Dist: platformdirs>=4.3.6
74
73
  Requires-Dist: typing-extensions>=4.12.2
@@ -117,8 +116,10 @@ Requires-Dist: python-xlib==0.33; platform_system == "Linux"
117
116
  Requires-Dist: pyreadline3>=3.5.3; platform_system == "Windows"
118
117
  Requires-Dist: setuptools~=70.2; python_version < "3.10"
119
118
  Requires-Dist: urllib3<2,>=1.26.20; python_version < "3.10"
120
- Requires-Dist: setuptools>=73.0.1; python_version >= "3.10"
119
+ Requires-Dist: websockets~=13.1; python_version < "3.9"
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.1; python_version >= "3.9"
122
123
  Provides-Extra: allure
123
124
  Requires-Dist: allure-pytest>=2.13.5; extra == "allure"
124
125
  Requires-Dist: allure-python-commons>=2.13.5; extra == "allure"
@@ -126,7 +127,7 @@ Requires-Dist: allure-behave>=2.13.5; extra == "allure"
126
127
  Provides-Extra: coverage
127
128
  Requires-Dist: coverage>=7.6.1; python_version < "3.9" and extra == "coverage"
128
129
  Requires-Dist: pytest-cov>=5.0.0; python_version < "3.9" and extra == "coverage"
129
- Requires-Dist: coverage>=7.6.4; python_version >= "3.9" and extra == "coverage"
130
+ Requires-Dist: coverage>=7.6.5; python_version >= "3.9" and extra == "coverage"
130
131
  Requires-Dist: pytest-cov>=6.0.0; python_version >= "3.9" and extra == "coverage"
131
132
  Provides-Extra: flake8
132
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=4vxqPf3tt44pMrMcI7vtp034yhLK0HPRb3dBIbALHDE,46
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=p2L-Yl_r8yN7t9TuTNgJnMlV4EguT49Nd0Oc_OwOZCw,217230
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=0B_3MSfNdh-3Q5UCvIezMBXebwmcRVhR5Ugkkqz0UNA,44183
54
- seleniumbase/core/sb_driver.py,sha256=-k4vHwMnuiBIkdVInTtJA-IDLrgQfyMhNxSHMIsjepw,11623
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=DfOl1L5VCOaKduVqvnkBeUc4qHs3n6SEdl65CLXaEFs,711565
69
- seleniumbase/fixtures/constants.py,sha256=XYYMpB-ZDI756LvfhSK9RxdqQ_qO9fJVXgBqBYlQNkk,13609
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=5o4CTLcCyd717lJ_atOYcC6kPRiZFx-LJIlixRrP_cE,51061
73
- seleniumbase/fixtures/page_actions.py,sha256=fOCb2NB2PpEaE8gpAVu-73VjwLzfwP1R9HsRkix_z6s,66634
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=QdoepYzSpt0J_iKQhhJCENY9ry0hB2juXKkEVI3TSTg,7263
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
@@ -86,11 +86,11 @@ seleniumbase/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
86
86
  seleniumbase/plugins/base_plugin.py,sha256=FemdftNhOaTfQIw5bWcJQPPPGQ3P0_sMEI_YYDuzZgU,14972
87
87
  seleniumbase/plugins/basic_test_info.py,sha256=8ov6n417gPbqqvrlT4zrch7l2XcRt-GF2ny6rR9AMWk,2108
88
88
  seleniumbase/plugins/db_reporting_plugin.py,sha256=En09qUCoojrk9-vbcnsoHdSELoGmag2GDIyu3jTiJas,7331
89
- seleniumbase/plugins/driver_manager.py,sha256=0W87pKdZpoBxq1xnWthgqZAdjlEhwMR4LgntrzsTd9M,34575
89
+ seleniumbase/plugins/driver_manager.py,sha256=s20s0pJYaNrG0WNwyIC04oUMRVFjtm6V_nS1-EvFm7g,34492
90
90
  seleniumbase/plugins/page_source.py,sha256=loTnXxOj4kxEukuTZEiGyvKBhY3KDVDMnNlHHheTBDE,1889
91
91
  seleniumbase/plugins/pytest_plugin.py,sha256=Up96HY6q3hcPo4LQoEcKqt1hm2OmY5GZz_nMXTqDSXQ,97185
92
92
  seleniumbase/plugins/s3_logging_plugin.py,sha256=WDfertQgGOW_SRJpFMaekYD6vBVW9VO62POtXXy2HCM,2319
93
- seleniumbase/plugins/sb_manager.py,sha256=xOij0pxUyDRsIa8Bm1s5Zy4zikElNKDk6TYx_dqQ2Bw,54333
93
+ seleniumbase/plugins/sb_manager.py,sha256=_Uefqpopw6M5NZq7WRi5sXyPMSyaCtBA7oSXObhlvM8,54250
94
94
  seleniumbase/plugins/screen_shots.py,sha256=1hrXw-hzuZ1BR6Yh7AyWX2ABnvnP73-RCbwdz958gj4,1127
95
95
  seleniumbase/plugins/selenium_plugin.py,sha256=GhGW2ATy2kM7UH7NrZ2je402nN2LMlVHpM-yxlU3I9E,59069
96
96
  seleniumbase/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -118,8 +118,8 @@ seleniumbase/undetected/cdp_driver/_contradict.py,sha256=6thDYeoEGiC7Q3tXLgoD_Ah
118
118
  seleniumbase/undetected/cdp_driver/browser.py,sha256=mGmpWuR206yYJoBPTNslru8CbEpQuvvIHdjBylSkoKg,30020
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
- seleniumbase/undetected/cdp_driver/connection.py,sha256=HnwXlD4rawGzCyiGR3Shr4iaK7KTncvSqs3CXxCZM_8,23266
122
- seleniumbase/undetected/cdp_driver/element.py,sha256=9oD9GxguctunrlHV3lWXlZgb9cNEjD5x03Oy84OqyVA,39631
121
+ seleniumbase/undetected/cdp_driver/connection.py,sha256=sOTUGjbUqKA2hPvDcRCdqw1VQjVGJs7mbgVvzS7ldtE,23360
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.8.dist-info/LICENSE,sha256=odSYtWibXBnQ1gBg6CnDZ82n8kLF_if5-2nbqnEyD8k,1085
139
- seleniumbase-4.32.8.dist-info/METADATA,sha256=3sk3bpk1UBB7K_jHCYyHcx8ol_tCtXdH5upksSf4gU8,86380
140
- seleniumbase-4.32.8.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
141
- seleniumbase-4.32.8.dist-info/entry_points.txt,sha256=CNrh2EKNaHYEhO6pP1RJyVLB99LkDDYX7TnUK8xfjqk,623
142
- seleniumbase-4.32.8.dist-info/top_level.txt,sha256=4N97aBOQ8ETCnDnokBsWb07lJfTaq3C1ZzYRxvLMxqU,19
143
- seleniumbase-4.32.8.dist-info/RECORD,,
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,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.3.0)
2
+ Generator: setuptools (75.5.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5