seleniumbase 4.39.2__py3-none-any.whl → 4.39.5__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.
@@ -1,2 +1,2 @@
1
1
  # seleniumbase package
2
- __version__ = "4.39.2"
2
+ __version__ = "4.39.5"
@@ -532,6 +532,7 @@ def uc_open_with_reconnect(driver, url, reconnect_time=None):
532
532
 
533
533
 
534
534
  def uc_open_with_cdp_mode(driver, url=None, **kwargs):
535
+ """Activate CDP Mode with the URL and kwargs."""
535
536
  import asyncio
536
537
  from seleniumbase.undetected.cdp_driver import cdp_util
537
538
 
@@ -679,6 +680,9 @@ def uc_open_with_cdp_mode(driver, url=None, **kwargs):
679
680
  cdp.go_forward = CDPM.go_forward
680
681
  cdp.get_navigation_history = CDPM.get_navigation_history
681
682
  cdp.tile_windows = CDPM.tile_windows
683
+ cdp.grant_permissions = CDPM.grant_permissions
684
+ cdp.grant_all_permissions = CDPM.grant_all_permissions
685
+ cdp.reset_permissions = CDPM.reset_permissions
682
686
  cdp.get_all_cookies = CDPM.get_all_cookies
683
687
  cdp.set_all_cookies = CDPM.set_all_cookies
684
688
  cdp.save_cookies = CDPM.save_cookies
@@ -2144,6 +2148,7 @@ def _set_chrome_options(
2144
2148
  prefs["download.prompt_for_download"] = False
2145
2149
  prefs["download_bubble.partial_view_enabled"] = False
2146
2150
  prefs["credentials_enable_service"] = False
2151
+ prefs["autofill.credit_card_enabled"] = False
2147
2152
  prefs["local_discovery.notifications_enabled"] = False
2148
2153
  prefs["safebrowsing.enabled"] = False # Prevent PW "data breach" pop-ups
2149
2154
  prefs["safebrowsing.disable_download_protection"] = True
@@ -4002,6 +4007,7 @@ def get_local_driver(
4002
4007
  "download.directory_upgrade": True,
4003
4008
  "download.prompt_for_download": False,
4004
4009
  "credentials_enable_service": False,
4010
+ "autofill.credit_card_enabled": False,
4005
4011
  "local_discovery.notifications_enabled": False,
4006
4012
  "safebrowsing.disable_download_protection": True,
4007
4013
  "safebrowsing.enabled": False, # Prevent PW "data breach" pop-ups
@@ -645,6 +645,30 @@ class CDPMethods():
645
645
  driver.tile_windows(windows, max_columns)
646
646
  )
647
647
 
648
+ def grant_permissions(self, permissions, origin=None):
649
+ """Grant specific permissions to the current window.
650
+ Applies to all origins if no origin is specified."""
651
+ driver = self.driver
652
+ if hasattr(driver, "cdp_base"):
653
+ driver = driver.cdp_base
654
+ return self.loop.run_until_complete(
655
+ driver.grant_permissions(permissions, origin)
656
+ )
657
+
658
+ def grant_all_permissions(self):
659
+ """Grant all permissions to the current window for all origins."""
660
+ driver = self.driver
661
+ if hasattr(driver, "cdp_base"):
662
+ driver = driver.cdp_base
663
+ return self.loop.run_until_complete(driver.grant_all_permissions())
664
+
665
+ def reset_permissions(self):
666
+ """Reset permissions for all origins on the current window."""
667
+ driver = self.driver
668
+ if hasattr(driver, "cdp_base"):
669
+ driver = driver.cdp_base
670
+ return self.loop.run_until_complete(driver.reset_permissions())
671
+
648
672
  def get_all_cookies(self, *args, **kwargs):
649
673
  driver = self.driver
650
674
  if hasattr(driver, "cdp_base"):
@@ -681,9 +705,7 @@ class CDPMethods():
681
705
  driver = self.driver
682
706
  if hasattr(driver, "cdp_base"):
683
707
  driver = driver.cdp_base
684
- return self.loop.run_until_complete(
685
- driver.cookies.clear()
686
- )
708
+ return self.loop.run_until_complete(driver.cookies.clear())
687
709
 
688
710
  def sleep(self, seconds):
689
711
  time.sleep(seconds)
@@ -702,9 +724,7 @@ class CDPMethods():
702
724
 
703
725
  js_code = active_css_js.get_active_element_css
704
726
  js_code = js_code.replace("return getBestSelector", "getBestSelector")
705
- return self.loop.run_until_complete(
706
- self.page.evaluate(js_code)
707
- )
727
+ return self.loop.run_until_complete(self.page.evaluate(js_code))
708
728
 
709
729
  def click(self, selector, timeout=None):
710
730
  if not timeout:
@@ -978,17 +998,13 @@ class CDPMethods():
978
998
  "\n".join(exp_list[0:-1]) + "\n"
979
999
  + exp_list[-1].strip()[len("return "):]
980
1000
  ).strip()
981
- return self.loop.run_until_complete(
982
- self.page.evaluate(expression)
983
- )
1001
+ return self.loop.run_until_complete(self.page.evaluate(expression))
984
1002
 
985
1003
  def js_dumps(self, obj_name):
986
1004
  """Similar to evaluate(), but for dictionary results."""
987
1005
  if obj_name.startswith("return "):
988
1006
  obj_name = obj_name[len("return "):]
989
- return self.loop.run_until_complete(
990
- self.page.js_dumps(obj_name)
991
- )
1007
+ return self.loop.run_until_complete(self.page.js_dumps(obj_name))
992
1008
 
993
1009
  def maximize(self):
994
1010
  if self.get_window()[1].window_state.value == "maximized":
@@ -1309,6 +1325,8 @@ class CDPMethods():
1309
1325
  )
1310
1326
 
1311
1327
  def get_element_attribute(self, selector, attribute):
1328
+ """Find an element and return the value of an attribute.
1329
+ Raises an exception if there's no such element or attribute."""
1312
1330
  attributes = self.get_element_attributes(selector)
1313
1331
  with suppress(Exception):
1314
1332
  return attributes[attribute]
@@ -1319,10 +1337,16 @@ class CDPMethods():
1319
1337
  return value
1320
1338
 
1321
1339
  def get_attribute(self, selector, attribute):
1340
+ """Find an element and return the value of an attribute.
1341
+ If the element doesn't exist: Raises an exception.
1342
+ If the attribute doesn't exist: Returns None."""
1322
1343
  return self.find_element(selector).get_attribute(attribute)
1323
1344
 
1324
1345
  def get_element_html(self, selector):
1346
+ """Find an element and return the outerHTML."""
1325
1347
  selector = self.__convert_to_css_if_xpath(selector)
1348
+ self.find_element(selector)
1349
+ self.__add_light_pause()
1326
1350
  return self.loop.run_until_complete(
1327
1351
  self.page.evaluate(
1328
1352
  """document.querySelector('%s').outerHTML"""
@@ -1910,7 +1910,10 @@ class BaseCase(unittest.TestCase):
1910
1910
  timeout = self.__get_new_timeout(timeout)
1911
1911
  selector, by = self.__recalculate_selector(selector, by)
1912
1912
  if self.__is_cdp_swap_needed():
1913
- return self.cdp.get_element_attribute(selector, attribute)
1913
+ if hard_fail:
1914
+ return self.cdp.get_element_attribute(selector, attribute)
1915
+ else:
1916
+ return self.cdp.get_attribute(selector, attribute)
1914
1917
  self.wait_for_ready_state_complete()
1915
1918
  time.sleep(0.01)
1916
1919
  if self.__is_shadow_selector(selector):
@@ -4592,9 +4595,9 @@ class BaseCase(unittest.TestCase):
4592
4595
  Loads the page cookies from the "saved_cookies" folder.
4593
4596
  Usage for setting expiry:
4594
4597
  If expiry == 0 or False: Delete "expiry".
4598
+ If expiry is True: Set "expiry" to 24 hours in the future.
4595
4599
  If expiry == -1 (or < 0): Do not modify "expiry".
4596
4600
  If expiry > 0: Set "expiry" to expiry minutes in the future.
4597
- If expiry == True: Set "expiry" to 24 hours in the future.
4598
4601
  """
4599
4602
  cookies = self.get_saved_cookies(name)
4600
4603
  self.wait_for_ready_state_complete()
@@ -4606,12 +4609,12 @@ class BaseCase(unittest.TestCase):
4606
4609
  cookie["domain"] = trim_origin
4607
4610
  if "expiry" in cookie and (not expiry or expiry == 0):
4608
4611
  del cookie["expiry"]
4612
+ elif expiry is True:
4613
+ cookie["expiry"] = int(time.time()) + 86400
4609
4614
  elif isinstance(expiry, (int, float)) and expiry < 0:
4610
4615
  pass
4611
4616
  elif isinstance(expiry, (int, float)) and expiry > 0:
4612
4617
  cookie["expiry"] = int(time.time()) + int(expiry * 60.0)
4613
- elif expiry:
4614
- cookie["expiry"] = int(time.time()) + 86400
4615
4618
  self.driver.add_cookie(cookie)
4616
4619
 
4617
4620
  def delete_all_cookies(self):
@@ -4693,9 +4696,9 @@ class BaseCase(unittest.TestCase):
4693
4696
  self.add_cookie({'name': 'foo', 'value': 'bar', 'sameSite': 'Strict'})
4694
4697
  Usage for setting expiry:
4695
4698
  If expiry == 0 or False: Delete "expiry".
4699
+ If expiry is True: Set "expiry" to 24 hours in the future.
4696
4700
  If expiry == -1 (or < 0): Do not modify "expiry".
4697
4701
  If expiry > 0: Set "expiry" to expiry minutes in the future.
4698
- If expiry == True: Set "expiry" to 24 hours in the future.
4699
4702
  """
4700
4703
  self.__check_scope()
4701
4704
  self._check_browser()
@@ -4707,21 +4710,21 @@ class BaseCase(unittest.TestCase):
4707
4710
  cookie["domain"] = trim_origin
4708
4711
  if "expiry" in cookie and (not expiry or expiry == 0):
4709
4712
  del cookie["expiry"]
4713
+ elif expiry is True:
4714
+ cookie["expiry"] = int(time.time()) + 86400
4710
4715
  elif isinstance(expiry, (int, float)) and expiry < 0:
4711
4716
  pass
4712
4717
  elif isinstance(expiry, (int, float)) and expiry > 0:
4713
4718
  cookie["expiry"] = int(time.time()) + int(expiry * 60.0)
4714
- elif expiry:
4715
- cookie["expiry"] = int(time.time()) + 86400
4716
4719
  self.driver.add_cookie(cookie_dict)
4717
4720
 
4718
4721
  def add_cookies(self, cookies, expiry=False):
4719
4722
  """
4720
4723
  Usage for setting expiry:
4721
4724
  If expiry == 0 or False: Delete "expiry".
4725
+ If expiry is True: Set "expiry" to 24 hours in the future.
4722
4726
  If expiry == -1 (or < 0): Do not modify "expiry".
4723
4727
  If expiry > 0: Set "expiry" to expiry minutes in the future.
4724
- If expiry == True: Set "expiry" to 24 hours in the future.
4725
4728
  """
4726
4729
  self.__check_scope()
4727
4730
  self._check_browser()
@@ -4733,12 +4736,12 @@ class BaseCase(unittest.TestCase):
4733
4736
  cookie["domain"] = trim_origin
4734
4737
  if "expiry" in cookie and (not expiry or expiry == 0):
4735
4738
  del cookie["expiry"]
4739
+ elif expiry is True:
4740
+ cookie["expiry"] = int(time.time()) + 86400
4736
4741
  elif isinstance(expiry, (int, float)) and expiry < 0:
4737
4742
  pass
4738
4743
  elif isinstance(expiry, (int, float)) and expiry > 0:
4739
4744
  cookie["expiry"] = int(time.time()) + int(expiry * 60.0)
4740
- elif expiry:
4741
- cookie["expiry"] = int(time.time()) + 86400
4742
4745
  self.driver.add_cookie(cookie)
4743
4746
 
4744
4747
  def __set_esc_skip(self):
@@ -4883,6 +4886,7 @@ class BaseCase(unittest.TestCase):
4883
4886
  self.execute_script(script)
4884
4887
 
4885
4888
  def activate_cdp_mode(self, url=None, **kwargs):
4889
+ """Activate CDP Mode with the URL and kwargs."""
4886
4890
  if hasattr(self.driver, "_is_using_uc") and self.driver._is_using_uc:
4887
4891
  if self.__is_cdp_swap_needed():
4888
4892
  return # CDP Mode is already active
@@ -4898,6 +4902,8 @@ class BaseCase(unittest.TestCase):
4898
4902
  self.cdp = self.driver.cdp
4899
4903
 
4900
4904
  def activate_recorder(self):
4905
+ """Activate Recorder Mode on the current tab/window.
4906
+ For persistent Recorder Mode, use the extension instead."""
4901
4907
  from seleniumbase.js_code.recorder_js import recorder_js
4902
4908
 
4903
4909
  if not self.is_chromium():
@@ -2160,7 +2160,12 @@ def _perform_pytest_unconfigure_(config):
2160
2160
  from seleniumbase.core import proxy_helper
2161
2161
 
2162
2162
  reporter = config.pluginmanager.get_plugin("terminalreporter")
2163
- duration = time.time() - reporter._sessionstarttime
2163
+ start_time = None
2164
+ if hasattr(reporter, "_sessionstarttime"):
2165
+ start_time = reporter._sessionstarttime # (pytest < 8.4.0)
2166
+ else:
2167
+ start_time = reporter._session_start.time # (pytest >= 8.4.0)
2168
+ duration = time.time() - start_time
2164
2169
  if (
2165
2170
  (hasattr(sb_config, "multi_proxy") and not sb_config.multi_proxy)
2166
2171
  or not hasattr(sb_config, "multi_proxy")
@@ -2497,7 +2502,11 @@ def pytest_unconfigure(config):
2497
2502
  if "--co" in sys_argv or "--collect-only" in sys_argv:
2498
2503
  return
2499
2504
  reporter = config.pluginmanager.get_plugin("terminalreporter")
2500
- if not hasattr(reporter, "_sessionstarttime"):
2505
+ if (
2506
+ not hasattr(reporter, "_sessionstarttime")
2507
+ and not hasattr(reporter, "_session_start")
2508
+ and not hasattr(reporter._session_start, "time")
2509
+ ):
2501
2510
  return
2502
2511
  if hasattr(sb_config, "_multithreaded") and sb_config._multithreaded:
2503
2512
  import fasteners
@@ -16,7 +16,7 @@ import urllib.request
16
16
  import warnings
17
17
  from collections import defaultdict
18
18
  from seleniumbase import config as sb_config
19
- from typing import List, Set, Tuple, Union
19
+ from typing import List, Optional, Set, Tuple, Union
20
20
  import mycdp as cdp
21
21
  from . import cdp_util as util
22
22
  from . import tab
@@ -504,10 +504,22 @@ class Browser:
504
504
  # self.connection.handlers[cdp.inspector.Detached] = [self.stop]
505
505
  # return self
506
506
 
507
+ async def grant_permissions(
508
+ self,
509
+ permissions: List[str] | str,
510
+ origin: Optional[str] = None,
511
+ ):
512
+ """Grant specific permissions to the current window.
513
+ Applies to all origins if no origin is specified."""
514
+ if isinstance(permissions, str):
515
+ permissions = [permissions]
516
+ await self.connection.send(
517
+ cdp.browser.grant_permissions(permissions, origin)
518
+ )
519
+
507
520
  async def grant_all_permissions(self):
508
521
  """
509
522
  Grant permissions for:
510
- accessibilityEvents
511
523
  audioCapture
512
524
  backgroundSync
513
525
  backgroundFetch
@@ -524,21 +536,45 @@ class Browser:
524
536
  notifications
525
537
  paymentHandler
526
538
  periodicBackgroundSync
527
- protectedMediaIdentifier
528
539
  sensors
529
540
  storageAccess
530
541
  topLevelStorageAccess
531
542
  videoCapture
532
- videoCapturePanTiltZoom
533
543
  wakeLockScreen
534
544
  wakeLockSystem
535
545
  windowManagement
536
546
  """
537
- permissions = list(cdp.browser.PermissionType)
538
- permissions.remove(cdp.browser.PermissionType.FLASH)
539
- permissions.remove(cdp.browser.PermissionType.CAPTURED_SURFACE_CONTROL)
547
+ permissions = [
548
+ "audioCapture",
549
+ "backgroundSync",
550
+ "backgroundFetch",
551
+ "clipboardReadWrite",
552
+ "clipboardSanitizedWrite",
553
+ "displayCapture",
554
+ "durableStorage",
555
+ "geolocation",
556
+ "idleDetection",
557
+ "localFonts",
558
+ "midi",
559
+ "midiSysex",
560
+ "nfc",
561
+ "notifications",
562
+ "paymentHandler",
563
+ "periodicBackgroundSync",
564
+ "sensors",
565
+ "storageAccess",
566
+ "topLevelStorageAccess",
567
+ "videoCapture",
568
+ "wakeLockScreen",
569
+ "wakeLockSystem",
570
+ "windowManagement",
571
+ ]
540
572
  await self.connection.send(cdp.browser.grant_permissions(permissions))
541
573
 
574
+ async def reset_permissions(self):
575
+ """Reset permissions for all origins on the current window."""
576
+ await self.connection.send(cdp.browser.reset_permissions())
577
+
542
578
  async def tile_windows(self, windows=None, max_columns: int = 0):
543
579
  import math
544
580
  try:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: seleniumbase
3
- Version: 4.39.2
3
+ Version: 4.39.5
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
@@ -40,6 +40,7 @@ Classifier: Programming Language :: Python :: 3.10
40
40
  Classifier: Programming Language :: Python :: 3.11
41
41
  Classifier: Programming Language :: Python :: 3.12
42
42
  Classifier: Programming Language :: Python :: 3.13
43
+ Classifier: Programming Language :: Python :: 3.14
43
44
  Classifier: Topic :: Internet
44
45
  Classifier: Topic :: Internet :: WWW/HTTP :: Browsers
45
46
  Classifier: Topic :: Scientific/Engineering
@@ -63,10 +64,10 @@ Requires-Dist: pip>=25.0.1; python_version < "3.9"
63
64
  Requires-Dist: pip>=25.1.1; python_version >= "3.9"
64
65
  Requires-Dist: packaging>=25.0
65
66
  Requires-Dist: setuptools~=70.2; python_version < "3.10"
66
- Requires-Dist: setuptools>=80.8.0; python_version >= "3.10"
67
+ Requires-Dist: setuptools>=80.9.0; python_version >= "3.10"
67
68
  Requires-Dist: wheel>=0.45.1
68
69
  Requires-Dist: attrs>=25.3.0
69
- Requires-Dist: certifi>=2025.4.26
70
+ Requires-Dist: certifi>=2025.6.15
70
71
  Requires-Dist: exceptiongroup>=1.3.0
71
72
  Requires-Dist: websockets~=13.1; python_version < "3.9"
72
73
  Requires-Dist: websockets>=15.0.1; python_version >= "3.9"
@@ -96,7 +97,7 @@ Requires-Dist: chardet==5.2.0
96
97
  Requires-Dist: charset-normalizer<4,>=3.4.2
97
98
  Requires-Dist: urllib3<2,>=1.26.20; python_version < "3.10"
98
99
  Requires-Dist: urllib3<2.5.0,>=1.26.20; python_version >= "3.10"
99
- Requires-Dist: requests==2.32.3
100
+ Requires-Dist: requests==2.32.4
100
101
  Requires-Dist: sniffio==1.3.1
101
102
  Requires-Dist: h11==0.16.0
102
103
  Requires-Dist: outcome==1.3.0.post0
@@ -115,7 +116,8 @@ Requires-Dist: execnet==2.1.1
115
116
  Requires-Dist: iniconfig==2.1.0
116
117
  Requires-Dist: pluggy==1.5.0; python_version < "3.9"
117
118
  Requires-Dist: pluggy==1.6.0; python_version >= "3.9"
118
- Requires-Dist: pytest==8.3.5
119
+ Requires-Dist: pytest==8.3.5; python_version < "3.9"
120
+ Requires-Dist: pytest==8.4.0; python_version >= "3.9"
119
121
  Requires-Dist: pytest-html==4.0.2
120
122
  Requires-Dist: pytest-metadata==3.1.1
121
123
  Requires-Dist: pytest-ordering==0.6
@@ -138,9 +140,9 @@ Requires-Dist: allure-python-commons>=2.13.5; extra == "allure"
138
140
  Requires-Dist: allure-behave>=2.13.5; extra == "allure"
139
141
  Provides-Extra: coverage
140
142
  Requires-Dist: coverage>=7.6.1; python_version < "3.9" and extra == "coverage"
141
- Requires-Dist: coverage>=7.8.2; python_version >= "3.9" and extra == "coverage"
143
+ Requires-Dist: coverage>=7.9.1; python_version >= "3.9" and extra == "coverage"
142
144
  Requires-Dist: pytest-cov>=5.0.0; python_version < "3.9" and extra == "coverage"
143
- Requires-Dist: pytest-cov>=6.1.1; python_version >= "3.9" and extra == "coverage"
145
+ Requires-Dist: pytest-cov>=6.2.1; python_version >= "3.9" and extra == "coverage"
144
146
  Provides-Extra: flake8
145
147
  Requires-Dist: flake8==5.0.4; python_version < "3.9" and extra == "flake8"
146
148
  Requires-Dist: flake8==7.2.0; python_version >= "3.9" and extra == "flake8"
@@ -159,7 +161,7 @@ Provides-Extra: pdfminer
159
161
  Requires-Dist: pdfminer.six==20250324; python_version < "3.9" and extra == "pdfminer"
160
162
  Requires-Dist: pdfminer.six==20250506; python_version >= "3.9" and extra == "pdfminer"
161
163
  Requires-Dist: cryptography==39.0.2; python_version < "3.9" and extra == "pdfminer"
162
- Requires-Dist: cryptography==45.0.3; python_version >= "3.9" and extra == "pdfminer"
164
+ Requires-Dist: cryptography==45.0.4; python_version >= "3.9" and extra == "pdfminer"
163
165
  Requires-Dist: cffi==1.17.1; extra == "pdfminer"
164
166
  Requires-Dist: pycparser==2.22; extra == "pdfminer"
165
167
  Provides-Extra: pillow
@@ -3,7 +3,7 @@ sbase/__main__.py,sha256=G0bVB1-DM4PGwQ1KyOupaWCs4ePbChZNNWuX2htim5U,647
3
3
  sbase/steps.py,sha256=_WvAjydKqZfTdnZW9LPKkRty-g-lfdUPmLqnZj6ulcs,43013
4
4
  seleniumbase/__init__.py,sha256=JFEY9P5QJqsa1M6ghzLMH2eIPQyh85iglCaQwg8Y8z4,2498
5
5
  seleniumbase/__main__.py,sha256=dn1p6dgCchmcH1zzTzzQvFwwdQQqnTGH6ULV9m4hv24,654
6
- seleniumbase/__version__.py,sha256=lKg8cpa3sHnLx8LvY_0AE9MEapr-ETW6w2um2b_KvJA,46
6
+ seleniumbase/__version__.py,sha256=fE-VlrT_5wvHoF_FXLo8I-Zcpf9nims5W88jxxXXRfs,46
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=bbbfa8ID6nMnmrVJ7G-014uOj5PE4B8IROZB2WXSQ8I,59172
@@ -36,7 +36,7 @@ seleniumbase/console_scripts/sb_print.py,sha256=tNy-bMDgwHJO3bZxMpmo9weSE8uhbH0C
36
36
  seleniumbase/console_scripts/sb_recorder.py,sha256=DH-n2fN7N9qyHMl7wjtn8MiliBgfw-1kwgmfg1GUuhk,10772
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=EwMup2zhgUGslHsjoeMPbKSD5-W92M2hKO6RiNqL06Q,242895
39
+ seleniumbase/core/browser_launcher.py,sha256=8BJ9DqkyNmJce_-6KwpsR-HHp8X8JJvXAZB4ik-5LL4,243210
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,7 +50,7 @@ seleniumbase/core/proxy_helper.py,sha256=pZ1NboNfziHU3vWZLOZLX-qkfM3oKSnpc3omQf9
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=z_4qx2jI_gtK5r3niGXgEOBpfMUicUCOciowai50MP4,3529
53
- seleniumbase/core/sb_cdp.py,sha256=zgkVXOhwf94NGdsUO0eM8yVUS3s5FzSuAPJNsz3lrZo,86452
53
+ seleniumbase/core/sb_cdp.py,sha256=plIklEXJWYPWKhZv1POozsVgsRMntGKMgpKFGCMeHNk,87786
54
54
  seleniumbase/core/sb_driver.py,sha256=yUdS9_9OXTVaWzp1qY7msvnsvCK8X3FIcxMixb0BuBE,13827
55
55
  seleniumbase/core/session_helper.py,sha256=s9zD3PVZEWVzG2h81cCUskbNWLfdjC_LwwQjKptHCak,558
56
56
  seleniumbase/core/settings_parser.py,sha256=gqVohHVlE_5L5Cqe2L24uYrRzvoK-saX8E_Df7_-_3I,7609
@@ -65,7 +65,7 @@ seleniumbase/extensions/disable_csp.zip,sha256=5RvomXnm2PdivUVcxTV6jfvD8WhTEsQYH
65
65
  seleniumbase/extensions/recorder.zip,sha256=JEE_FVEvlS63cFQbVLEroIyPSS91nWCDL0MhjVrmIpk,11813
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=zlF10aFjJdRUS6nT9ksvcXPdyD7A_mlFyAgEuQkVRj4,727097
68
+ seleniumbase/fixtures/base_case.py,sha256=zTz2eHinYkdXIyETYl0fna9X8MbIt4dkowA_Y-Z2HBI,727422
69
69
  seleniumbase/fixtures/constants.py,sha256=WMrItuNyKq3XVJ64NluLIRc4gJCxDw8K8qXED0b9S2w,13752
70
70
  seleniumbase/fixtures/css_to_xpath.py,sha256=9ouDB1xl4MJ2os6JOgTIAyHKOQfuxtxvXC3O5hSnEKA,1954
71
71
  seleniumbase/fixtures/errors.py,sha256=KyxuEVx_e3MPhVrJfNIa_3ltMpbCFxfy_jxK8RFNTns,555
@@ -88,7 +88,7 @@ seleniumbase/plugins/basic_test_info.py,sha256=8ov6n417gPbqqvrlT4zrch7l2XcRt-GF2
88
88
  seleniumbase/plugins/db_reporting_plugin.py,sha256=En09qUCoojrk9-vbcnsoHdSELoGmag2GDIyu3jTiJas,7331
89
89
  seleniumbase/plugins/driver_manager.py,sha256=VSYQgDDA2t34gi-3qPkw5Ef9SX8sVQX3RETHOihyKHc,36558
90
90
  seleniumbase/plugins/page_source.py,sha256=loTnXxOj4kxEukuTZEiGyvKBhY3KDVDMnNlHHheTBDE,1889
91
- seleniumbase/plugins/pytest_plugin.py,sha256=952AIyaH-PdmNksoeXjzhXxoc8Z53yV-WPjlrHhp2OM,108382
91
+ seleniumbase/plugins/pytest_plugin.py,sha256=dijsJuCsKo8LmhJ4NvXnYJyUiSFhbGdkzd6a4vy-3DQ,108709
92
92
  seleniumbase/plugins/s3_logging_plugin.py,sha256=WDfertQgGOW_SRJpFMaekYD6vBVW9VO62POtXXy2HCM,2319
93
93
  seleniumbase/plugins/sb_manager.py,sha256=ulTDorccan06eVYtSqlX26EFKXmS0gCY0huJ67Q5gTY,58082
94
94
  seleniumbase/plugins/screen_shots.py,sha256=1hrXw-hzuZ1BR6Yh7AyWX2ABnvnP73-RCbwdz958gj4,1127
@@ -115,7 +115,7 @@ seleniumbase/undetected/reactor.py,sha256=NropaXcO54pzmDq6quR27qPJxab6636H7LRAaq
115
115
  seleniumbase/undetected/webelement.py,sha256=OOpUYbEiOG52KsYYyuDW9tYLdA2SMnukvwQHUdPVn9E,1389
116
116
  seleniumbase/undetected/cdp_driver/__init__.py,sha256=Ga9alwuaZZy4_XOShc0HjgFnNqpPdrcbjAicz5gE7a4,215
117
117
  seleniumbase/undetected/cdp_driver/_contradict.py,sha256=lP4b0h5quAy573ETn_TBbYV889cL1AuPLVInpJ0ZkiU,3183
118
- seleniumbase/undetected/cdp_driver/browser.py,sha256=5XVzfA6JQqh5q5ShKgSwjebB9n598leKZ4EYfG49bgs,34565
118
+ seleniumbase/undetected/cdp_driver/browser.py,sha256=LF0TukNNuPN1zh75oiPBHKU3uLc4BmVyyw0EFn7hnWg,35640
119
119
  seleniumbase/undetected/cdp_driver/cdp_util.py,sha256=_DoF4EE1osbzSb3do-sIrMnL_Gse2S2vs3NUAuhGSAI,24819
120
120
  seleniumbase/undetected/cdp_driver/config.py,sha256=4-nUkEf7JSuOdFMNd6XmJnFucZrA59-kH1FUMxDcgFU,12561
121
121
  seleniumbase/undetected/cdp_driver/connection.py,sha256=WgZ4QamXSdTzP4Xfgkn8mxv-JFivMG6hqbyHy2_LQlg,25717
@@ -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.39.2.dist-info/licenses/LICENSE,sha256=BRblZsX7HyPUjQmYTiyWr_e9tzWvmR3R4SFclM2R3W0,1085
139
- seleniumbase-4.39.2.dist-info/METADATA,sha256=zpx8oqimtSYIkLI1km87q72UZwlGwX0xll23x7bCS5M,87206
140
- seleniumbase-4.39.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
141
- seleniumbase-4.39.2.dist-info/entry_points.txt,sha256=CNrh2EKNaHYEhO6pP1RJyVLB99LkDDYX7TnUK8xfjqk,623
142
- seleniumbase-4.39.2.dist-info/top_level.txt,sha256=4N97aBOQ8ETCnDnokBsWb07lJfTaq3C1ZzYRxvLMxqU,19
143
- seleniumbase-4.39.2.dist-info/RECORD,,
138
+ seleniumbase-4.39.5.dist-info/licenses/LICENSE,sha256=BRblZsX7HyPUjQmYTiyWr_e9tzWvmR3R4SFclM2R3W0,1085
139
+ seleniumbase-4.39.5.dist-info/METADATA,sha256=fD9WjfRqszxn6h42HNEPsj4qzV9VlVfoB-yj3nmjHzU,87335
140
+ seleniumbase-4.39.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
141
+ seleniumbase-4.39.5.dist-info/entry_points.txt,sha256=CNrh2EKNaHYEhO6pP1RJyVLB99LkDDYX7TnUK8xfjqk,623
142
+ seleniumbase-4.39.5.dist-info/top_level.txt,sha256=4N97aBOQ8ETCnDnokBsWb07lJfTaq3C1ZzYRxvLMxqU,19
143
+ seleniumbase-4.39.5.dist-info/RECORD,,