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.
- seleniumbase/__version__.py +1 -1
- seleniumbase/core/browser_launcher.py +6 -0
- seleniumbase/core/sb_cdp.py +36 -12
- seleniumbase/fixtures/base_case.py +16 -10
- seleniumbase/plugins/pytest_plugin.py +11 -2
- seleniumbase/undetected/cdp_driver/browser.py +43 -7
- {seleniumbase-4.39.2.dist-info → seleniumbase-4.39.5.dist-info}/METADATA +10 -8
- {seleniumbase-4.39.2.dist-info → seleniumbase-4.39.5.dist-info}/RECORD +12 -12
- {seleniumbase-4.39.2.dist-info → seleniumbase-4.39.5.dist-info}/WHEEL +0 -0
- {seleniumbase-4.39.2.dist-info → seleniumbase-4.39.5.dist-info}/entry_points.txt +0 -0
- {seleniumbase-4.39.2.dist-info → seleniumbase-4.39.5.dist-info}/licenses/LICENSE +0 -0
- {seleniumbase-4.39.2.dist-info → seleniumbase-4.39.5.dist-info}/top_level.txt +0 -0
seleniumbase/__version__.py
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
# seleniumbase package
|
2
|
-
__version__ = "4.39.
|
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
|
seleniumbase/core/sb_cdp.py
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
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 =
|
538
|
-
|
539
|
-
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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.
|
139
|
-
seleniumbase-4.39.
|
140
|
-
seleniumbase-4.39.
|
141
|
-
seleniumbase-4.39.
|
142
|
-
seleniumbase-4.39.
|
143
|
-
seleniumbase-4.39.
|
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,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|