seleniumbase 4.28.0a3__py3-none-any.whl → 4.28.2__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 +28 -19
- seleniumbase/fixtures/base_case.py +2 -2
- seleniumbase/fixtures/page_actions.py +16 -2
- seleniumbase/fixtures/shared_utils.py +11 -11
- seleniumbase/plugins/driver_manager.py +14 -0
- seleniumbase/plugins/sb_manager.py +14 -0
- seleniumbase/undetected/__init__.py +12 -8
- {seleniumbase-4.28.0a3.dist-info → seleniumbase-4.28.2.dist-info}/METADATA +6 -6
- {seleniumbase-4.28.0a3.dist-info → seleniumbase-4.28.2.dist-info}/RECORD +14 -14
- {seleniumbase-4.28.0a3.dist-info → seleniumbase-4.28.2.dist-info}/WHEEL +1 -1
- {seleniumbase-4.28.0a3.dist-info → seleniumbase-4.28.2.dist-info}/LICENSE +0 -0
- {seleniumbase-4.28.0a3.dist-info → seleniumbase-4.28.2.dist-info}/entry_points.txt +0 -0
- {seleniumbase-4.28.0a3.dist-info → seleniumbase-4.28.2.dist-info}/top_level.txt +0 -0
seleniumbase/__version__.py
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
# seleniumbase package
|
2
|
-
__version__ = "4.28.
|
2
|
+
__version__ = "4.28.2"
|
@@ -389,7 +389,9 @@ def uc_special_open_if_cf(
|
|
389
389
|
driver.execute_script('window.open("%s","_blank");' % url)
|
390
390
|
driver.close()
|
391
391
|
if mobile_emulator:
|
392
|
-
|
392
|
+
page_actions.switch_to_window(
|
393
|
+
driver, driver.window_handles[-1], 2
|
394
|
+
)
|
393
395
|
uc_metrics = {}
|
394
396
|
if (
|
395
397
|
isinstance(device_width, int)
|
@@ -419,7 +421,9 @@ def uc_special_open_if_cf(
|
|
419
421
|
except Exception:
|
420
422
|
pass
|
421
423
|
if not mobile_emulator:
|
422
|
-
|
424
|
+
page_actions.switch_to_window(
|
425
|
+
driver, driver.window_handles[-1], 2
|
426
|
+
)
|
423
427
|
else:
|
424
428
|
driver.default_get(url) # The original one
|
425
429
|
else:
|
@@ -450,7 +454,7 @@ def uc_open_with_tab(driver, url):
|
|
450
454
|
with driver:
|
451
455
|
driver.execute_script('window.open("%s","_blank");' % url)
|
452
456
|
driver.close()
|
453
|
-
|
457
|
+
page_actions.switch_to_window(driver, driver.window_handles[-1], 2)
|
454
458
|
else:
|
455
459
|
driver.default_get(url) # The original one
|
456
460
|
return None
|
@@ -476,10 +480,14 @@ def uc_open_with_reconnect(driver, url, reconnect_time=None):
|
|
476
480
|
driver.reconnect(reconnect_time)
|
477
481
|
time.sleep(0.004)
|
478
482
|
try:
|
479
|
-
|
483
|
+
page_actions.switch_to_window(
|
484
|
+
driver, driver.window_handles[-1], 2
|
485
|
+
)
|
480
486
|
except InvalidSessionIdException:
|
481
487
|
time.sleep(0.05)
|
482
|
-
|
488
|
+
page_actions.switch_to_window(
|
489
|
+
driver, driver.window_handles[-1], 2
|
490
|
+
)
|
483
491
|
else:
|
484
492
|
driver.default_get(url) # The original one
|
485
493
|
return None
|
@@ -546,17 +554,17 @@ def uc_click(
|
|
546
554
|
driver.reconnect(reconnect_time)
|
547
555
|
|
548
556
|
|
549
|
-
def verify_pyautogui_has_a_headed_browser():
|
557
|
+
def verify_pyautogui_has_a_headed_browser(driver):
|
550
558
|
"""PyAutoGUI requires a headed browser so that it can
|
551
559
|
focus on the correct element when performing actions."""
|
552
|
-
if
|
560
|
+
if hasattr(driver, "_is_hidden") and driver._is_hidden:
|
553
561
|
raise Exception(
|
554
562
|
"PyAutoGUI can't be used in headless mode!"
|
555
563
|
)
|
556
564
|
|
557
565
|
|
558
|
-
def install_pyautogui_if_missing():
|
559
|
-
verify_pyautogui_has_a_headed_browser()
|
566
|
+
def install_pyautogui_if_missing(driver):
|
567
|
+
verify_pyautogui_has_a_headed_browser(driver)
|
560
568
|
pip_find_lock = fasteners.InterProcessLock(
|
561
569
|
constants.PipInstall.FINDLOCK
|
562
570
|
)
|
@@ -566,10 +574,11 @@ def install_pyautogui_if_missing():
|
|
566
574
|
try:
|
567
575
|
use_pyautogui_ver = constants.PyAutoGUI.VER
|
568
576
|
if pyautogui.__version__ != use_pyautogui_ver:
|
577
|
+
del pyautogui
|
569
578
|
shared_utils.pip_install(
|
570
579
|
"pyautogui", version=use_pyautogui_ver
|
571
580
|
)
|
572
|
-
|
581
|
+
import pyautogui
|
573
582
|
except Exception:
|
574
583
|
pass
|
575
584
|
except Exception:
|
@@ -607,7 +616,7 @@ def get_configured_pyautogui(pyautogui_copy):
|
|
607
616
|
|
608
617
|
|
609
618
|
def uc_gui_press_key(driver, key):
|
610
|
-
install_pyautogui_if_missing()
|
619
|
+
install_pyautogui_if_missing(driver)
|
611
620
|
import pyautogui
|
612
621
|
pyautogui = get_configured_pyautogui(pyautogui)
|
613
622
|
gui_lock = fasteners.InterProcessLock(
|
@@ -618,7 +627,7 @@ def uc_gui_press_key(driver, key):
|
|
618
627
|
|
619
628
|
|
620
629
|
def uc_gui_press_keys(driver, keys):
|
621
|
-
install_pyautogui_if_missing()
|
630
|
+
install_pyautogui_if_missing(driver)
|
622
631
|
import pyautogui
|
623
632
|
pyautogui = get_configured_pyautogui(pyautogui)
|
624
633
|
gui_lock = fasteners.InterProcessLock(
|
@@ -630,7 +639,7 @@ def uc_gui_press_keys(driver, keys):
|
|
630
639
|
|
631
640
|
|
632
641
|
def uc_gui_write(driver, text):
|
633
|
-
install_pyautogui_if_missing()
|
642
|
+
install_pyautogui_if_missing(driver)
|
634
643
|
import pyautogui
|
635
644
|
pyautogui = get_configured_pyautogui(pyautogui)
|
636
645
|
gui_lock = fasteners.InterProcessLock(
|
@@ -647,7 +656,7 @@ def uc_gui_handle_cf(driver, frame="iframe"):
|
|
647
656
|
and 'aria-label="Cloudflare"' not in source
|
648
657
|
):
|
649
658
|
return
|
650
|
-
install_pyautogui_if_missing()
|
659
|
+
install_pyautogui_if_missing(driver)
|
651
660
|
import pyautogui
|
652
661
|
pyautogui = get_configured_pyautogui(pyautogui)
|
653
662
|
gui_lock = fasteners.InterProcessLock(
|
@@ -663,9 +672,7 @@ def uc_gui_handle_cf(driver, frame="iframe"):
|
|
663
672
|
if not is_in_frame:
|
664
673
|
# Make sure the window is on top
|
665
674
|
page_actions.switch_to_window(
|
666
|
-
driver,
|
667
|
-
driver.current_window_handle,
|
668
|
-
timeout=settings.SMALL_TIMEOUT,
|
675
|
+
driver, driver.current_window_handle, 2
|
669
676
|
)
|
670
677
|
if not is_in_frame or needs_switch:
|
671
678
|
# Currently not in frame (or nested frame outside CF one)
|
@@ -1030,7 +1037,7 @@ def _set_chrome_options(
|
|
1030
1037
|
prefs["download.prompt_for_download"] = False
|
1031
1038
|
prefs["credentials_enable_service"] = False
|
1032
1039
|
prefs["local_discovery.notifications_enabled"] = False
|
1033
|
-
prefs["safebrowsing.enabled"] =
|
1040
|
+
prefs["safebrowsing.enabled"] = False # Prevent PW "data breach" pop-ups
|
1034
1041
|
prefs["safebrowsing.disable_download_protection"] = True
|
1035
1042
|
prefs["omnibox-max-zero-suggest-matches"] = 0
|
1036
1043
|
prefs["omnibox-use-existing-autocomplete-client"] = 0
|
@@ -2621,7 +2628,7 @@ def get_local_driver(
|
|
2621
2628
|
"credentials_enable_service": False,
|
2622
2629
|
"local_discovery.notifications_enabled": False,
|
2623
2630
|
"safebrowsing.disable_download_protection": True,
|
2624
|
-
"safebrowsing.enabled":
|
2631
|
+
"safebrowsing.enabled": False, # Prevent PW "data breach" pop-ups
|
2625
2632
|
"omnibox-max-zero-suggest-matches": 0,
|
2626
2633
|
"omnibox-use-existing-autocomplete-client": 0,
|
2627
2634
|
"omnibox-trending-zero-prefix-suggestions-on-ntp": 0,
|
@@ -4030,6 +4037,8 @@ def get_local_driver(
|
|
4030
4037
|
driver, *args, **kwargs
|
4031
4038
|
)
|
4032
4039
|
)
|
4040
|
+
driver._is_hidden = (headless or headless2)
|
4041
|
+
driver._is_using_uc = True
|
4033
4042
|
if mobile_emulator:
|
4034
4043
|
uc_metrics = {}
|
4035
4044
|
if (
|
@@ -6822,10 +6822,10 @@ class BaseCase(unittest.TestCase):
|
|
6822
6822
|
try:
|
6823
6823
|
import cryptography
|
6824
6824
|
if cryptography.__version__ != "39.0.2":
|
6825
|
+
del cryptography # To get newer ver
|
6825
6826
|
shared_utils.pip_install(
|
6826
6827
|
"cryptography", version="39.0.2"
|
6827
6828
|
)
|
6828
|
-
del cryptography # To get newer ver
|
6829
6829
|
import cryptography
|
6830
6830
|
except Exception:
|
6831
6831
|
shared_utils.pip_install(
|
@@ -13749,10 +13749,10 @@ class BaseCase(unittest.TestCase):
|
|
13749
13749
|
try:
|
13750
13750
|
use_pyautogui_ver = constants.PyAutoGUI.VER
|
13751
13751
|
if pyautogui.__version__ != use_pyautogui_ver:
|
13752
|
+
del pyautogui # To get newer ver
|
13752
13753
|
shared_utils.pip_install(
|
13753
13754
|
"pyautogui", version=use_pyautogui_ver
|
13754
13755
|
)
|
13755
|
-
del pyautogui # To get newer ver
|
13756
13756
|
import pyautogui
|
13757
13757
|
except Exception:
|
13758
13758
|
pass
|
@@ -18,6 +18,7 @@ By.TAG_NAME # "tag name"
|
|
18
18
|
By.PARTIAL_LINK_TEXT # "partial link text"
|
19
19
|
"""
|
20
20
|
import codecs
|
21
|
+
import fasteners
|
21
22
|
import os
|
22
23
|
import time
|
23
24
|
from selenium.common.exceptions import ElementNotInteractableException
|
@@ -32,6 +33,7 @@ from selenium.webdriver.common.keys import Keys
|
|
32
33
|
from seleniumbase.common.exceptions import LinkTextNotFoundException
|
33
34
|
from seleniumbase.common.exceptions import TextNotVisibleException
|
34
35
|
from seleniumbase.config import settings
|
36
|
+
from seleniumbase.fixtures import constants
|
35
37
|
from seleniumbase.fixtures import page_utils
|
36
38
|
from seleniumbase.fixtures import shared_utils
|
37
39
|
|
@@ -1428,6 +1430,18 @@ def switch_to_frame(driver, frame, timeout=settings.SMALL_TIMEOUT):
|
|
1428
1430
|
timeout_exception(Exception, message)
|
1429
1431
|
|
1430
1432
|
|
1433
|
+
def __switch_to_window(driver, window_handle):
|
1434
|
+
if hasattr(driver, "_is_using_uc") and driver._is_using_uc:
|
1435
|
+
gui_lock = fasteners.InterProcessLock(
|
1436
|
+
constants.MultiBrowser.PYAUTOGUILOCK
|
1437
|
+
)
|
1438
|
+
with gui_lock:
|
1439
|
+
driver.switch_to.window(window_handle)
|
1440
|
+
else:
|
1441
|
+
driver.switch_to.window(window_handle)
|
1442
|
+
return True
|
1443
|
+
|
1444
|
+
|
1431
1445
|
def switch_to_window(driver, window, timeout=settings.SMALL_TIMEOUT):
|
1432
1446
|
"""
|
1433
1447
|
Wait for a window to appear, and switch to it. This should be usable
|
@@ -1451,7 +1465,7 @@ def switch_to_window(driver, window, timeout=settings.SMALL_TIMEOUT):
|
|
1451
1465
|
shared_utils.check_if_time_limit_exceeded()
|
1452
1466
|
try:
|
1453
1467
|
window_handle = driver.window_handles[window]
|
1454
|
-
driver
|
1468
|
+
__switch_to_window(driver, window_handle)
|
1455
1469
|
return True
|
1456
1470
|
except IndexError:
|
1457
1471
|
now_ms = time.time() * 1000.0
|
@@ -1472,7 +1486,7 @@ def switch_to_window(driver, window, timeout=settings.SMALL_TIMEOUT):
|
|
1472
1486
|
for x in range(int(timeout * 10)):
|
1473
1487
|
shared_utils.check_if_time_limit_exceeded()
|
1474
1488
|
try:
|
1475
|
-
driver
|
1489
|
+
__switch_to_window(driver, window_handle)
|
1476
1490
|
return True
|
1477
1491
|
except NoSuchWindowException:
|
1478
1492
|
now_ms = time.time() * 1000.0
|
@@ -81,46 +81,46 @@ def format_exc(exception, message):
|
|
81
81
|
from seleniumbase.common.exceptions import TextNotVisibleException
|
82
82
|
from seleniumbase.common import exceptions
|
83
83
|
|
84
|
-
if exception
|
84
|
+
if exception is Exception:
|
85
85
|
exc = Exception
|
86
86
|
return exc, message
|
87
|
-
elif exception
|
87
|
+
elif exception is ElementNotVisibleException:
|
88
88
|
exc = exceptions.ElementNotVisibleException
|
89
89
|
elif exception == "ElementNotVisibleException":
|
90
90
|
exc = exceptions.ElementNotVisibleException
|
91
|
-
elif exception
|
91
|
+
elif exception is LinkTextNotFoundException:
|
92
92
|
exc = exceptions.LinkTextNotFoundException
|
93
93
|
elif exception == "LinkTextNotFoundException":
|
94
94
|
exc = exceptions.LinkTextNotFoundException
|
95
|
-
elif exception
|
95
|
+
elif exception is NoSuchElementException:
|
96
96
|
exc = exceptions.NoSuchElementException
|
97
97
|
elif exception == "NoSuchElementException":
|
98
98
|
exc = exceptions.NoSuchElementException
|
99
|
-
elif exception
|
99
|
+
elif exception is TextNotVisibleException:
|
100
100
|
exc = exceptions.TextNotVisibleException
|
101
101
|
elif exception == "TextNotVisibleException":
|
102
102
|
exc = exceptions.TextNotVisibleException
|
103
|
-
elif exception
|
103
|
+
elif exception is NoAlertPresentException:
|
104
104
|
exc = exceptions.NoAlertPresentException
|
105
105
|
elif exception == "NoAlertPresentException":
|
106
106
|
exc = exceptions.NoAlertPresentException
|
107
|
-
elif exception
|
107
|
+
elif exception is NoSuchAttributeException:
|
108
108
|
exc = exceptions.NoSuchAttributeException
|
109
109
|
elif exception == "NoSuchAttributeException":
|
110
110
|
exc = exceptions.NoSuchAttributeException
|
111
|
-
elif exception
|
111
|
+
elif exception is NoSuchFrameException:
|
112
112
|
exc = exceptions.NoSuchFrameException
|
113
113
|
elif exception == "NoSuchFrameException":
|
114
114
|
exc = exceptions.NoSuchFrameException
|
115
|
-
elif exception
|
115
|
+
elif exception is NoSuchWindowException:
|
116
116
|
exc = exceptions.NoSuchWindowException
|
117
117
|
elif exception == "NoSuchWindowException":
|
118
118
|
exc = exceptions.NoSuchWindowException
|
119
|
-
elif exception
|
119
|
+
elif exception is NoSuchFileException:
|
120
120
|
exc = exceptions.NoSuchFileException
|
121
121
|
elif exception == "NoSuchFileException":
|
122
122
|
exc = exceptions.NoSuchFileException
|
123
|
-
elif exception
|
123
|
+
elif exception is NoSuchOptionException:
|
124
124
|
exc = exceptions.NoSuchOptionException
|
125
125
|
elif exception == "NoSuchOptionException":
|
126
126
|
exc = exceptions.NoSuchOptionException
|
@@ -125,7 +125,9 @@ def Driver(
|
|
125
125
|
uc_cdp=None, # Shortcut / Duplicate of "uc_cdp_events".
|
126
126
|
uc_sub=None, # Shortcut / Duplicate of "uc_subprocess".
|
127
127
|
log_cdp=None, # Shortcut / Duplicate of "log_cdp_events".
|
128
|
+
ad_block=None, # Shortcut / Duplicate of "ad_block_on".
|
128
129
|
server=None, # Shortcut / Duplicate of "servername".
|
130
|
+
guest=None, # Shortcut / Duplicate of "guest_mode".
|
129
131
|
wire=None, # Shortcut / Duplicate of "use_wire".
|
130
132
|
pls=None, # Shortcut / Duplicate of "page_load_strategy".
|
131
133
|
):
|
@@ -263,6 +265,8 @@ def Driver(
|
|
263
265
|
incognito = True
|
264
266
|
else:
|
265
267
|
incognito = False
|
268
|
+
if guest is not None and guest_mode is None:
|
269
|
+
guest_mode = guest
|
266
270
|
if guest_mode is None:
|
267
271
|
if "--guest" in sys_argv:
|
268
272
|
guest_mode = True
|
@@ -387,6 +391,14 @@ def Driver(
|
|
387
391
|
uc_cdp_events = True
|
388
392
|
else:
|
389
393
|
uc_cdp_events = False
|
394
|
+
if undetectable and browser != "chrome":
|
395
|
+
message = (
|
396
|
+
'\n Undetected-Chromedriver Mode ONLY supports Chrome!'
|
397
|
+
'\n ("uc=True" / "undetectable=True" / "--uc")'
|
398
|
+
'\n (Your browser choice was: "%s".)'
|
399
|
+
'\n (Will use "%s" without UC Mode.)\n' % (browser, browser)
|
400
|
+
)
|
401
|
+
print(message)
|
390
402
|
if headed is None:
|
391
403
|
# Override the default headless mode on Linux if set.
|
392
404
|
if "--gui" in sys_argv or "--headed" in sys_argv:
|
@@ -507,6 +519,8 @@ def Driver(
|
|
507
519
|
swiftshader = True
|
508
520
|
else:
|
509
521
|
swiftshader = False
|
522
|
+
if ad_block is not None and ad_block_on is None:
|
523
|
+
ad_block_on = ad_block
|
510
524
|
if ad_block_on is None:
|
511
525
|
if "--ad-block" in sys_argv or "--ad_block" in sys_argv:
|
512
526
|
ad_block_on = True
|
@@ -103,7 +103,9 @@ def SB(
|
|
103
103
|
uc_cdp=None, # Shortcut / Duplicate of "uc_cdp_events".
|
104
104
|
uc_sub=None, # Shortcut / Duplicate of "uc_subprocess".
|
105
105
|
log_cdp=None, # Shortcut / Duplicate of "log_cdp_events".
|
106
|
+
ad_block=None, # Shortcut / Duplicate of "ad_block_on".
|
106
107
|
server=None, # Shortcut / Duplicate of "servername".
|
108
|
+
guest=None, # Shortcut / Duplicate of "guest_mode".
|
107
109
|
wire=None, # Shortcut / Duplicate of "use_wire".
|
108
110
|
pls=None, # Shortcut / Duplicate of "page_load_strategy".
|
109
111
|
sjw=None, # Shortcut / Duplicate of "skip_js_waits".
|
@@ -296,6 +298,8 @@ def SB(
|
|
296
298
|
incognito = True
|
297
299
|
else:
|
298
300
|
incognito = False
|
301
|
+
if guest is not None and guest_mode is None:
|
302
|
+
guest_mode = guest
|
299
303
|
if guest_mode is None:
|
300
304
|
if "--guest" in sys_argv:
|
301
305
|
guest_mode = True
|
@@ -444,6 +448,14 @@ def SB(
|
|
444
448
|
uc_cdp_events = True
|
445
449
|
else:
|
446
450
|
uc_cdp_events = False
|
451
|
+
if undetectable and browser != "chrome":
|
452
|
+
message = (
|
453
|
+
'\n Undetected-Chromedriver Mode ONLY supports Chrome!'
|
454
|
+
'\n ("uc=True" / "undetectable=True" / "--uc")'
|
455
|
+
'\n (Your browser choice was: "%s".)'
|
456
|
+
'\n (Will use "%s" without UC Mode.)\n' % (browser, browser)
|
457
|
+
)
|
458
|
+
print(message)
|
447
459
|
if headed is None:
|
448
460
|
# Override the default headless mode on Linux if set.
|
449
461
|
if "--gui" in sys_argv or "--headed" in sys_argv:
|
@@ -651,6 +663,8 @@ def SB(
|
|
651
663
|
swiftshader = True
|
652
664
|
else:
|
653
665
|
swiftshader = False
|
666
|
+
if ad_block is not None and ad_block_on is None:
|
667
|
+
ad_block_on = ad_block
|
654
668
|
if ad_block_on is None:
|
655
669
|
if "--ad-block" in sys_argv or "--ad_block" in sys_argv:
|
656
670
|
ad_block_on = True
|
@@ -278,15 +278,19 @@ class Chrome(selenium.webdriver.chrome.webdriver.WebDriver):
|
|
278
278
|
options.binary_location, *options.arguments
|
279
279
|
)
|
280
280
|
else:
|
281
|
-
|
282
|
-
|
283
|
-
stdin=subprocess.PIPE,
|
284
|
-
stdout=subprocess.PIPE,
|
285
|
-
stderr=subprocess.PIPE,
|
286
|
-
close_fds=IS_POSIX,
|
287
|
-
creationflags=creationflags,
|
281
|
+
gui_lock = fasteners.InterProcessLock(
|
282
|
+
constants.MultiBrowser.PYAUTOGUILOCK
|
288
283
|
)
|
289
|
-
|
284
|
+
with gui_lock:
|
285
|
+
browser = subprocess.Popen(
|
286
|
+
[options.binary_location, *options.arguments],
|
287
|
+
stdin=subprocess.PIPE,
|
288
|
+
stdout=subprocess.PIPE,
|
289
|
+
stderr=subprocess.PIPE,
|
290
|
+
close_fds=IS_POSIX,
|
291
|
+
creationflags=creationflags,
|
292
|
+
)
|
293
|
+
self.browser_pid = browser.pid
|
290
294
|
service_ = None
|
291
295
|
log_output = subprocess.PIPE
|
292
296
|
if sys.version_info < (3, 8):
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: seleniumbase
|
3
|
-
Version: 4.28.
|
3
|
+
Version: 4.28.2
|
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
|
@@ -87,7 +87,7 @@ Requires-Dist: sbvirtualdisplay ==1.3.0
|
|
87
87
|
Requires-Dist: behave ==1.2.6
|
88
88
|
Requires-Dist: beautifulsoup4 ==4.12.3
|
89
89
|
Requires-Dist: tabcompleter ==1.3.0
|
90
|
-
Requires-Dist: pdbp ==1.5.
|
90
|
+
Requires-Dist: pdbp ==1.5.1
|
91
91
|
Requires-Dist: colorama ==0.4.6
|
92
92
|
Requires-Dist: pyotp ==2.9.0
|
93
93
|
Requires-Dist: mdurl ==0.1.2
|
@@ -113,11 +113,11 @@ Requires-Dist: soupsieve ==2.4.1 ; python_version < "3.8"
|
|
113
113
|
Requires-Dist: pygments ==2.17.2 ; python_version < "3.8"
|
114
114
|
Requires-Dist: markdown-it-py ==2.2.0 ; python_version < "3.8"
|
115
115
|
Requires-Dist: urllib3 <2.3.0,>=1.26.18 ; python_version >= "3.10"
|
116
|
-
Requires-Dist: pip >=24.1 ; python_version >= "3.8"
|
116
|
+
Requires-Dist: pip >=24.1.1 ; python_version >= "3.8"
|
117
117
|
Requires-Dist: packaging >=24.1 ; python_version >= "3.8"
|
118
|
-
Requires-Dist: setuptools >=70.1.
|
118
|
+
Requires-Dist: setuptools >=70.1.1 ; python_version >= "3.8"
|
119
119
|
Requires-Dist: wheel >=0.43.0 ; python_version >= "3.8"
|
120
|
-
Requires-Dist: filelock >=3.15.
|
120
|
+
Requires-Dist: filelock >=3.15.4 ; python_version >= "3.8"
|
121
121
|
Requires-Dist: platformdirs >=4.2.2 ; python_version >= "3.8"
|
122
122
|
Requires-Dist: typing-extensions >=4.12.2 ; python_version >= "3.8"
|
123
123
|
Requires-Dist: trio ==0.25.1 ; python_version >= "3.8"
|
@@ -139,7 +139,7 @@ Requires-Dist: allure-behave >=2.13.5 ; extra == 'allure'
|
|
139
139
|
Provides-Extra: coverage
|
140
140
|
Requires-Dist: coverage ==7.2.7 ; (python_version < "3.8") and extra == 'coverage'
|
141
141
|
Requires-Dist: pytest-cov ==4.1.0 ; (python_version < "3.8") and extra == 'coverage'
|
142
|
-
Requires-Dist: coverage >=7.5.
|
142
|
+
Requires-Dist: coverage >=7.5.4 ; (python_version >= "3.8") and extra == 'coverage'
|
143
143
|
Requires-Dist: pytest-cov >=5.0.0 ; (python_version >= "3.8") and extra == 'coverage'
|
144
144
|
Provides-Extra: flake8
|
145
145
|
Requires-Dist: mccabe ==0.7.0 ; extra == 'flake8'
|
@@ -5,7 +5,7 @@ sbase/steps.py,sha256=bKT_u5bJkKzYWEuAXi9NVVRYYxQRCM1_YJUrNFFRVPY,42865
|
|
5
5
|
seleniumbase/ReadMe.md,sha256=4nEdto4d0Ch0Zneg0yAC-RBBdqRqPUP0SCo-ze_XDPM,3612
|
6
6
|
seleniumbase/__init__.py,sha256=dgq30q6wGO2fJOVYemxC5hLxzv-of-MRn5P1YarBq5k,2263
|
7
7
|
seleniumbase/__main__.py,sha256=dn1p6dgCchmcH1zzTzzQvFwwdQQqnTGH6ULV9m4hv24,654
|
8
|
-
seleniumbase/__version__.py,sha256=
|
8
|
+
seleniumbase/__version__.py,sha256=5LdSq2oRCgT1RzNcyA-lqWKjAcD-Zx80dQ77gewKL18,46
|
9
9
|
seleniumbase/behave/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
10
10
|
seleniumbase/behave/behave_helper.py,sha256=elkl8P9eLulRAioLstE9baYNM9N_PHBmAOcajX-pH_Y,24198
|
11
11
|
seleniumbase/behave/behave_sb.py,sha256=q4uYZixZBf7VYWnQnEk2weTcyMy1X1faR3vyYvUzDiA,56406
|
@@ -40,7 +40,7 @@ seleniumbase/console_scripts/sb_print.py,sha256=yo641b_OdSE0GUauOyxk-QrNeIjYzbRY
|
|
40
40
|
seleniumbase/console_scripts/sb_recorder.py,sha256=UQQhnAR18dbcC7ToDvj6TM2PIG5qBrNaekaM6kSK_E8,10970
|
41
41
|
seleniumbase/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
42
42
|
seleniumbase/core/application_manager.py,sha256=e_0sjtI8cjY5BNyZj1QBR0j6_oCScxGmSXYEpcYwuZE,576
|
43
|
-
seleniumbase/core/browser_launcher.py,sha256=
|
43
|
+
seleniumbase/core/browser_launcher.py,sha256=SaXoKQkbybkJ8Sqi3FIsG8SInFYncRQTzAjar97HNlY,176804
|
44
44
|
seleniumbase/core/capabilities_parser.py,sha256=meIS2uHapTCq2ldfNAToC7r0cKmZDRXuYNKExM1GHDY,6038
|
45
45
|
seleniumbase/core/colored_traceback.py,sha256=DrRWfg7XEnKcgY59Xj7Jdk09H-XqHYBSUpB-DiZt6iY,2020
|
46
46
|
seleniumbase/core/create_db_tables.sql,sha256=VWPtrdiW_HQ6yETHjqTu-VIrTwvd8I8o1NfBeaVSHpU,972
|
@@ -70,14 +70,14 @@ seleniumbase/extensions/disable_csp.zip,sha256=YMifIIgEBiLrEFrS1sfW4Exh4br1V4oK1
|
|
70
70
|
seleniumbase/extensions/recorder.zip,sha256=OOyzF-Ize2cSRu1CqhzSAq5vusI9hqLLd2OIApUHesI,11918
|
71
71
|
seleniumbase/extensions/sbase_ext.zip,sha256=3s1N8zrVaMz8RQEOIoBzC3KDjtmHwVZRvVsX25Odr_s,8175
|
72
72
|
seleniumbase/fixtures/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
73
|
-
seleniumbase/fixtures/base_case.py,sha256=
|
73
|
+
seleniumbase/fixtures/base_case.py,sha256=qCh7W-WPtmpnSUsyc6CbERE4AH415Hp7Ms33GnLw_xo,698095
|
74
74
|
seleniumbase/fixtures/constants.py,sha256=TapuGLdERtvZPGMblVXkNGybr8tj8FMtN3sbJ3ygyoc,13569
|
75
75
|
seleniumbase/fixtures/css_to_xpath.py,sha256=9ouDB1xl4MJ2os6JOgTIAyHKOQfuxtxvXC3O5hSnEKA,1954
|
76
76
|
seleniumbase/fixtures/errors.py,sha256=KyxuEVx_e3MPhVrJfNIa_3ltMpbCFxfy_jxK8RFNTns,555
|
77
77
|
seleniumbase/fixtures/js_utils.py,sha256=y1FgWvrg7CjryqGnFhbmFIIVYMzQfYZhwppYae87UCo,51158
|
78
|
-
seleniumbase/fixtures/page_actions.py,sha256=
|
78
|
+
seleniumbase/fixtures/page_actions.py,sha256=lsat_gPsTwTsnqOrtCHZogDsufzMfUGjQ1ihiMjSeUk,62867
|
79
79
|
seleniumbase/fixtures/page_utils.py,sha256=QmAvTlT0j0ESf1IgvyXwHJapJakFM7QqBLXnHXgaeJw,12596
|
80
|
-
seleniumbase/fixtures/shared_utils.py,sha256=
|
80
|
+
seleniumbase/fixtures/shared_utils.py,sha256=Fc78v0OxfLPOPqeT8ExsdkTgXHlmpxvJeLbLyDnu1dI,5748
|
81
81
|
seleniumbase/fixtures/unittest_helper.py,sha256=sfZ92rZeBAn_sF_yQ3I6_I7h3lyU5-cV_UMegBNoEm8,1294
|
82
82
|
seleniumbase/fixtures/words.py,sha256=FOA4mAYvl3EPVpBTvgvK6YwCL8BdlRCmed685kEe7Vg,7827
|
83
83
|
seleniumbase/fixtures/xpath_to_css.py,sha256=lML56k656fElXJ4NJF07r35FjctrbgQkXUotNk7A-as,8876
|
@@ -92,11 +92,11 @@ seleniumbase/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
|
|
92
92
|
seleniumbase/plugins/base_plugin.py,sha256=o_-IraDNgsMEJQv1HsmS5ZcTvYOXiQ4NpxryG2m9c2A,14970
|
93
93
|
seleniumbase/plugins/basic_test_info.py,sha256=8ov6n417gPbqqvrlT4zrch7l2XcRt-GF2ny6rR9AMWk,2108
|
94
94
|
seleniumbase/plugins/db_reporting_plugin.py,sha256=En09qUCoojrk9-vbcnsoHdSELoGmag2GDIyu3jTiJas,7331
|
95
|
-
seleniumbase/plugins/driver_manager.py,sha256=
|
95
|
+
seleniumbase/plugins/driver_manager.py,sha256=x879oEkmHJnWQAaLCoppGya-YDh5_aoKVWXcBSer-do,23406
|
96
96
|
seleniumbase/plugins/page_source.py,sha256=loTnXxOj4kxEukuTZEiGyvKBhY3KDVDMnNlHHheTBDE,1889
|
97
97
|
seleniumbase/plugins/pytest_plugin.py,sha256=ObITovmkwpAcwXNxF6qTHRzERPA7_ntAmbxPRTefj1M,94999
|
98
98
|
seleniumbase/plugins/s3_logging_plugin.py,sha256=WDfertQgGOW_SRJpFMaekYD6vBVW9VO62POtXXy2HCM,2319
|
99
|
-
seleniumbase/plugins/sb_manager.py,sha256=
|
99
|
+
seleniumbase/plugins/sb_manager.py,sha256=8vNps3MTcS9XFG5hLYfkIAUI8BpVS7qtww0KpJC1UL4,41329
|
100
100
|
seleniumbase/plugins/screen_shots.py,sha256=1hrXw-hzuZ1BR6Yh7AyWX2ABnvnP73-RCbwdz958gj4,1127
|
101
101
|
seleniumbase/plugins/selenium_plugin.py,sha256=FESjalW8mdboLB_B59j8EeY6IvmEIbp_BY9cPTxJsM4,55122
|
102
102
|
seleniumbase/resources/ReadMe.md,sha256=uminnO5_Uv-UZDKcc9a9s9kxisaYUps-H98Fp5PJcaU,2124
|
@@ -114,7 +114,7 @@ seleniumbase/translate/portuguese.py,sha256=x3P4qxp56UiI41GoaL7JbUvFRYsgXU1EKjTg
|
|
114
114
|
seleniumbase/translate/russian.py,sha256=TyN9n0b4GRWDEYnHRGw1rfNAscdDmP3F3Y3aySM3C7s,27978
|
115
115
|
seleniumbase/translate/spanish.py,sha256=hh3xgW1Pq122SHYVvJAxFaXhFrjniOVncVbJbfWqOUM,25528
|
116
116
|
seleniumbase/translate/translator.py,sha256=yfoa4tCAbaD0W3gcbjsoGpNZjJdTY246W9uGuTlh4bw,49436
|
117
|
-
seleniumbase/undetected/__init__.py,sha256
|
117
|
+
seleniumbase/undetected/__init__.py,sha256=OCTExZ-VtAxMiarnpbPXurTTOp2-rBdqH2K7ywlZawk,22275
|
118
118
|
seleniumbase/undetected/cdp.py,sha256=EralLQm8diG5i6EoHFXHIQEc7Uf7PWtzyPH_upS5RIs,4047
|
119
119
|
seleniumbase/undetected/dprocess.py,sha256=WWQ_X_-Q7Lfx1m6oxkYHU0eTIc76Jodph4n1QnK4GEE,1706
|
120
120
|
seleniumbase/undetected/options.py,sha256=SGuz8iqlVPYN7IexNiGauupWF0xP3mqO72-9tgIqeuI,2999
|
@@ -137,9 +137,9 @@ seleniumbase/utilities/selenium_grid/start-grid-hub.sh,sha256=KADv0RUHONLL2_I443
|
|
137
137
|
seleniumbase/utilities/selenium_ide/ReadMe.md,sha256=hznGeuMpkIimqMiZBW-4goIy2ltW4l8X9kb0YSPUQfE,4483
|
138
138
|
seleniumbase/utilities/selenium_ide/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
139
139
|
seleniumbase/utilities/selenium_ide/convert_ide.py,sha256=pZFnqEJQEKZPyNFjkLD29s2HPQgCrWW9XJWpCPhWOoM,31691
|
140
|
-
seleniumbase-4.28.
|
141
|
-
seleniumbase-4.28.
|
142
|
-
seleniumbase-4.28.
|
143
|
-
seleniumbase-4.28.
|
144
|
-
seleniumbase-4.28.
|
145
|
-
seleniumbase-4.28.
|
140
|
+
seleniumbase-4.28.2.dist-info/LICENSE,sha256=odSYtWibXBnQ1gBg6CnDZ82n8kLF_if5-2nbqnEyD8k,1085
|
141
|
+
seleniumbase-4.28.2.dist-info/METADATA,sha256=4Tzxn1C24HxU7bFYBN93SWfE-YAQPQwqShJcXwDtUlA,85546
|
142
|
+
seleniumbase-4.28.2.dist-info/WHEEL,sha256=mguMlWGMX-VHnMpKOjjQidIo1ssRlCFu4a4mBpz1s2M,91
|
143
|
+
seleniumbase-4.28.2.dist-info/entry_points.txt,sha256=CNrh2EKNaHYEhO6pP1RJyVLB99LkDDYX7TnUK8xfjqk,623
|
144
|
+
seleniumbase-4.28.2.dist-info/top_level.txt,sha256=4N97aBOQ8ETCnDnokBsWb07lJfTaq3C1ZzYRxvLMxqU,19
|
145
|
+
seleniumbase-4.28.2.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|