seleniumbase 4.38.3__py3-none-any.whl → 4.39.1__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/behave/behave_sb.py +3 -9
- seleniumbase/console_scripts/run.py +0 -30
- seleniumbase/console_scripts/sb_behave_gui.py +0 -7
- seleniumbase/console_scripts/sb_caseplans.py +0 -7
- seleniumbase/console_scripts/sb_commander.py +0 -7
- seleniumbase/console_scripts/sb_mkrec.py +3 -2
- seleniumbase/console_scripts/sb_recorder.py +0 -6
- seleniumbase/core/browser_launcher.py +43 -9
- seleniumbase/core/mysql.py +2 -2
- seleniumbase/core/style_sheet.py +2 -9
- seleniumbase/core/visual_helper.py +2 -8
- seleniumbase/extensions/recorder.zip +0 -0
- seleniumbase/fixtures/base_case.py +4 -2
- seleniumbase/undetected/cdp_driver/browser.py +34 -0
- seleniumbase/undetected/cdp_driver/cdp_util.py +16 -6
- seleniumbase/undetected/cdp_driver/config.py +2 -1
- seleniumbase/undetected/cdp_driver/connection.py +30 -0
- {seleniumbase-4.38.3.dist-info → seleniumbase-4.39.1.dist-info}/METADATA +7 -5
- {seleniumbase-4.38.3.dist-info → seleniumbase-4.39.1.dist-info}/RECORD +24 -24
- {seleniumbase-4.38.3.dist-info → seleniumbase-4.39.1.dist-info}/WHEEL +1 -1
- {seleniumbase-4.38.3.dist-info → seleniumbase-4.39.1.dist-info}/entry_points.txt +0 -0
- {seleniumbase-4.38.3.dist-info → seleniumbase-4.39.1.dist-info}/licenses/LICENSE +0 -0
- {seleniumbase-4.38.3.dist-info → seleniumbase-4.39.1.dist-info}/top_level.txt +0 -0
seleniumbase/__version__.py
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
# seleniumbase package
|
2
|
-
__version__ = "4.
|
2
|
+
__version__ = "4.39.1"
|
seleniumbase/behave/behave_sb.py
CHANGED
@@ -1280,15 +1280,9 @@ def _perform_behave_unconfigure_():
|
|
1280
1280
|
)
|
1281
1281
|
find_it_3 = '<td class="col-result">Untested</td>'
|
1282
1282
|
swap_with_3 = '<td class="col-result">Unreported</td>'
|
1283
|
-
|
1284
|
-
|
1285
|
-
|
1286
|
-
DASH_PIE_PNG_2 = constants.Dashboard.get_dash_pie_2()
|
1287
|
-
else:
|
1288
|
-
from seleniumbase.core import encoded_images
|
1289
|
-
|
1290
|
-
DASH_PIE_PNG_1 = encoded_images.get_dash_pie_png1()
|
1291
|
-
DASH_PIE_PNG_2 = encoded_images.get_dash_pie_png2()
|
1283
|
+
# These use caching to prevent extra method calls
|
1284
|
+
DASH_PIE_PNG_1 = constants.Dashboard.get_dash_pie_1()
|
1285
|
+
DASH_PIE_PNG_2 = constants.Dashboard.get_dash_pie_2()
|
1292
1286
|
find_it_4 = 'href="%s"' % DASH_PIE_PNG_1
|
1293
1287
|
swap_with_4 = 'href="%s"' % DASH_PIE_PNG_2
|
1294
1288
|
try:
|
@@ -1001,7 +1001,6 @@ def main():
|
|
1001
1001
|
retry_msg_2 = "** Unable to download driver! Retrying in 5s..."
|
1002
1002
|
if " --proxy=" in " ".join(sys.argv):
|
1003
1003
|
from seleniumbase.core import proxy_helper
|
1004
|
-
|
1005
1004
|
for arg in sys.argv:
|
1006
1005
|
if arg.startswith("--proxy="):
|
1007
1006
|
proxy_string = arg.split("--proxy=")[1]
|
@@ -1036,11 +1035,9 @@ def main():
|
|
1036
1035
|
show_install_usage()
|
1037
1036
|
elif command == "commander" or command == "gui":
|
1038
1037
|
from seleniumbase.console_scripts import sb_commander
|
1039
|
-
|
1040
1038
|
sb_commander.main()
|
1041
1039
|
elif command == "behave-gui" or command == "gui-behave":
|
1042
1040
|
from seleniumbase.console_scripts import sb_behave_gui
|
1043
|
-
|
1044
1041
|
sb_behave_gui.main()
|
1045
1042
|
elif (
|
1046
1043
|
command == "caseplans"
|
@@ -1048,14 +1045,12 @@ def main():
|
|
1048
1045
|
or command == "case_plans"
|
1049
1046
|
):
|
1050
1047
|
from seleniumbase.console_scripts import sb_caseplans
|
1051
|
-
|
1052
1048
|
sb_caseplans.main()
|
1053
1049
|
elif (
|
1054
1050
|
command == "recorder"
|
1055
1051
|
or (command == "record" and len(command_args) == 0)
|
1056
1052
|
):
|
1057
1053
|
from seleniumbase.console_scripts import sb_recorder
|
1058
|
-
|
1059
1054
|
sb_recorder.main()
|
1060
1055
|
elif (
|
1061
1056
|
command == "mkrec"
|
@@ -1064,7 +1059,6 @@ def main():
|
|
1064
1059
|
):
|
1065
1060
|
if len(command_args) >= 1:
|
1066
1061
|
from seleniumbase.console_scripts import sb_mkrec
|
1067
|
-
|
1068
1062
|
sb_mkrec.main()
|
1069
1063
|
else:
|
1070
1064
|
show_basic_usage()
|
@@ -1075,7 +1069,6 @@ def main():
|
|
1075
1069
|
elif command == "mkdir":
|
1076
1070
|
if len(command_args) >= 1:
|
1077
1071
|
from seleniumbase.console_scripts import sb_mkdir
|
1078
|
-
|
1079
1072
|
sb_mkdir.main()
|
1080
1073
|
else:
|
1081
1074
|
show_basic_usage()
|
@@ -1083,7 +1076,6 @@ def main():
|
|
1083
1076
|
elif command == "mkfile":
|
1084
1077
|
if len(command_args) >= 1:
|
1085
1078
|
from seleniumbase.console_scripts import sb_mkfile
|
1086
|
-
|
1087
1079
|
sb_mkfile.main()
|
1088
1080
|
else:
|
1089
1081
|
show_basic_usage()
|
@@ -1091,7 +1083,6 @@ def main():
|
|
1091
1083
|
elif command == "mkpres":
|
1092
1084
|
if len(command_args) >= 1:
|
1093
1085
|
from seleniumbase.console_scripts import sb_mkpres
|
1094
|
-
|
1095
1086
|
sb_mkpres.main()
|
1096
1087
|
else:
|
1097
1088
|
show_basic_usage()
|
@@ -1099,7 +1090,6 @@ def main():
|
|
1099
1090
|
elif command == "mkchart":
|
1100
1091
|
if len(command_args) >= 1:
|
1101
1092
|
from seleniumbase.console_scripts import sb_mkchart
|
1102
|
-
|
1103
1093
|
sb_mkchart.main()
|
1104
1094
|
else:
|
1105
1095
|
show_basic_usage()
|
@@ -1107,7 +1097,6 @@ def main():
|
|
1107
1097
|
elif command == "convert":
|
1108
1098
|
if len(command_args) == 1:
|
1109
1099
|
from seleniumbase.utilities.selenium_ide import convert_ide
|
1110
|
-
|
1111
1100
|
convert_ide.main()
|
1112
1101
|
else:
|
1113
1102
|
show_basic_usage()
|
@@ -1115,22 +1104,13 @@ def main():
|
|
1115
1104
|
elif command == "print":
|
1116
1105
|
if len(command_args) >= 1:
|
1117
1106
|
from seleniumbase.console_scripts import sb_print
|
1118
|
-
|
1119
1107
|
sb_print.main()
|
1120
1108
|
else:
|
1121
1109
|
show_basic_usage()
|
1122
1110
|
show_print_usage()
|
1123
1111
|
elif command == "translate":
|
1124
1112
|
if len(command_args) >= 1:
|
1125
|
-
if sys.version_info[0] == 2:
|
1126
|
-
c5 = colorama.Fore.RED + colorama.Back.LIGHTYELLOW_EX
|
1127
|
-
cr = colorama.Style.RESET_ALL
|
1128
|
-
msg = "The SeleniumBase Translator does NOT support Python 2!"
|
1129
|
-
message = "\n" + c5 + msg + cr + "\n"
|
1130
|
-
print("")
|
1131
|
-
raise Exception(message)
|
1132
1113
|
from seleniumbase.translate import translator
|
1133
|
-
|
1134
1114
|
translator.main()
|
1135
1115
|
else:
|
1136
1116
|
show_basic_usage()
|
@@ -1138,7 +1118,6 @@ def main():
|
|
1138
1118
|
elif command == "extract-objects" or command == "extract_objects":
|
1139
1119
|
if len(command_args) >= 1:
|
1140
1120
|
from seleniumbase.console_scripts import sb_objectify
|
1141
|
-
|
1142
1121
|
sb_objectify.extract_objects()
|
1143
1122
|
else:
|
1144
1123
|
show_basic_usage()
|
@@ -1154,7 +1133,6 @@ def main():
|
|
1154
1133
|
elif command == "objectify":
|
1155
1134
|
if len(command_args) >= 1:
|
1156
1135
|
from seleniumbase.console_scripts import sb_objectify
|
1157
|
-
|
1158
1136
|
sb_objectify.objectify()
|
1159
1137
|
else:
|
1160
1138
|
show_basic_usage()
|
@@ -1162,7 +1140,6 @@ def main():
|
|
1162
1140
|
elif command == "revert-objects" or command == "revert_objects":
|
1163
1141
|
if len(command_args) >= 1:
|
1164
1142
|
from seleniumbase.console_scripts import sb_objectify
|
1165
|
-
|
1166
1143
|
sb_objectify.revert_objects()
|
1167
1144
|
else:
|
1168
1145
|
show_basic_usage()
|
@@ -1170,7 +1147,6 @@ def main():
|
|
1170
1147
|
elif command == "encrypt" or command == "obfuscate":
|
1171
1148
|
if len(command_args) >= 0:
|
1172
1149
|
from seleniumbase.common import obfuscate
|
1173
|
-
|
1174
1150
|
obfuscate.main()
|
1175
1151
|
else:
|
1176
1152
|
show_basic_usage()
|
@@ -1178,7 +1154,6 @@ def main():
|
|
1178
1154
|
elif command == "decrypt" or command == "unobfuscate":
|
1179
1155
|
if len(command_args) >= 0:
|
1180
1156
|
from seleniumbase.common import unobfuscate
|
1181
|
-
|
1182
1157
|
unobfuscate.main()
|
1183
1158
|
else:
|
1184
1159
|
show_basic_usage()
|
@@ -1188,7 +1163,6 @@ def main():
|
|
1188
1163
|
from seleniumbase.utilities.selenium_grid import (
|
1189
1164
|
download_selenium_server,
|
1190
1165
|
)
|
1191
|
-
|
1192
1166
|
download_selenium_server.main(force_download=True)
|
1193
1167
|
else:
|
1194
1168
|
show_basic_usage()
|
@@ -1196,7 +1170,6 @@ def main():
|
|
1196
1170
|
elif command == "grid-hub" or command == "grid_hub":
|
1197
1171
|
if len(command_args) >= 1:
|
1198
1172
|
from seleniumbase.utilities.selenium_grid import grid_hub
|
1199
|
-
|
1200
1173
|
grid_hub.main()
|
1201
1174
|
else:
|
1202
1175
|
show_basic_usage()
|
@@ -1204,7 +1177,6 @@ def main():
|
|
1204
1177
|
elif command == "grid-node" or command == "grid_node":
|
1205
1178
|
if len(command_args) >= 1:
|
1206
1179
|
from seleniumbase.utilities.selenium_grid import grid_node
|
1207
|
-
|
1208
1180
|
grid_node.main()
|
1209
1181
|
else:
|
1210
1182
|
show_basic_usage()
|
@@ -1212,7 +1184,6 @@ def main():
|
|
1212
1184
|
elif command == "version" or command == "--version" or command == "-v":
|
1213
1185
|
if len(command_args) == 0:
|
1214
1186
|
from seleniumbase.console_scripts import logo_helper
|
1215
|
-
|
1216
1187
|
seleniumbase_logo = logo_helper.get_seleniumbase_logo()
|
1217
1188
|
print(seleniumbase_logo)
|
1218
1189
|
print("")
|
@@ -1231,7 +1202,6 @@ def main():
|
|
1231
1202
|
import fasteners
|
1232
1203
|
import os
|
1233
1204
|
import warnings
|
1234
|
-
|
1235
1205
|
with warnings.catch_warnings():
|
1236
1206
|
warnings.simplefilter("ignore", category=UserWarning)
|
1237
1207
|
pip_find_lock = fasteners.InterProcessLock(
|
@@ -20,13 +20,6 @@ import tkinter as tk
|
|
20
20
|
from seleniumbase.fixtures import shared_utils
|
21
21
|
from tkinter.scrolledtext import ScrolledText
|
22
22
|
|
23
|
-
if sys.version_info <= (3, 8):
|
24
|
-
current_version = ".".join(str(ver) for ver in sys.version_info[:3])
|
25
|
-
raise Exception(
|
26
|
-
"\n* SBase Commander requires Python 3.8 or newer!"
|
27
|
-
"\n** You are currently using Python %s" % current_version
|
28
|
-
)
|
29
|
-
|
30
23
|
|
31
24
|
def set_colors(use_colors):
|
32
25
|
c0 = ""
|
@@ -25,13 +25,6 @@ from seleniumbase.fixtures import shared_utils
|
|
25
25
|
from tkinter import messagebox
|
26
26
|
from tkinter.scrolledtext import ScrolledText
|
27
27
|
|
28
|
-
if sys.version_info <= (3, 8):
|
29
|
-
current_version = ".".join(str(ver) for ver in sys.version_info[:3])
|
30
|
-
raise Exception(
|
31
|
-
"\n* SBase Case Plans Generator requires Python 3.8 or newer!"
|
32
|
-
"\n** You are currently using Python %s" % current_version
|
33
|
-
)
|
34
|
-
|
35
28
|
|
36
29
|
def set_colors(use_colors):
|
37
30
|
c0 = ""
|
@@ -25,13 +25,6 @@ import tkinter as tk
|
|
25
25
|
from seleniumbase.fixtures import shared_utils
|
26
26
|
from tkinter.scrolledtext import ScrolledText
|
27
27
|
|
28
|
-
if sys.version_info <= (3, 8):
|
29
|
-
current_version = ".".join(str(ver) for ver in sys.version_info[:3])
|
30
|
-
raise Exception(
|
31
|
-
"\n* SBase Commander requires Python 3.8 or newer!"
|
32
|
-
"\n** You are currently using Python %s" % current_version
|
33
|
-
)
|
34
|
-
|
35
28
|
|
36
29
|
def set_colors(use_colors):
|
37
30
|
c0 = ""
|
@@ -192,8 +192,9 @@ def main():
|
|
192
192
|
elif "'" not in start_page:
|
193
193
|
used_sp = "'%s'" % start_page
|
194
194
|
data.append(
|
195
|
-
" self.
|
196
|
-
" %s
|
195
|
+
" self.activate_cdp_mode(\n"
|
196
|
+
" %s,\n"
|
197
|
+
" recorder=True,\n"
|
197
198
|
" )" % used_sp
|
198
199
|
)
|
199
200
|
else:
|
@@ -30,12 +30,6 @@ sb_config.rec_subprocess_used = False
|
|
30
30
|
sys_executable = sys.executable
|
31
31
|
if " " in sys_executable:
|
32
32
|
sys_executable = "python"
|
33
|
-
if sys.version_info <= (3, 8):
|
34
|
-
current_version = ".".join(str(ver) for ver in sys.version_info[:3])
|
35
|
-
raise Exception(
|
36
|
-
"\n* Recorder Desktop requires Python 3.8 or newer!"
|
37
|
-
"\n*** You are currently using Python %s" % current_version
|
38
|
-
)
|
39
33
|
|
40
34
|
|
41
35
|
def set_colors(use_colors):
|
@@ -108,7 +108,9 @@ def make_driver_executable_if_not(driver_path):
|
|
108
108
|
shared_utils.make_executable(driver_path)
|
109
109
|
|
110
110
|
|
111
|
-
def extend_driver(
|
111
|
+
def extend_driver(
|
112
|
+
driver, proxy_auth=False, use_uc=True, recorder_ext=False
|
113
|
+
):
|
112
114
|
# Extend the driver with new methods
|
113
115
|
driver.default_find_element = driver.find_element
|
114
116
|
driver.default_find_elements = driver.find_elements
|
@@ -234,6 +236,14 @@ def extend_driver(driver, proxy_auth=False, use_uc=True):
|
|
234
236
|
driver.switch_to_tab = DM.switch_to_tab
|
235
237
|
driver.switch_to_frame = DM.switch_to_frame
|
236
238
|
driver.reset_window_size = DM.reset_window_size
|
239
|
+
if recorder_ext:
|
240
|
+
from seleniumbase.js_code.recorder_js import recorder_js
|
241
|
+
recorder_code = (
|
242
|
+
"""window.onload = function() { %s };""" % recorder_js
|
243
|
+
)
|
244
|
+
driver.execute_cdp_cmd(
|
245
|
+
"Page.addScriptToEvaluateOnNewDocument", {"source": recorder_code}
|
246
|
+
)
|
237
247
|
if hasattr(driver, "proxy"):
|
238
248
|
driver.set_wire_proxy = DM.set_wire_proxy
|
239
249
|
if proxy_auth:
|
@@ -2542,6 +2552,7 @@ def _set_chrome_options(
|
|
2542
2552
|
included_disabled_features.append("PrivacySandboxSettings4")
|
2543
2553
|
included_disabled_features.append("SidePanelPinning")
|
2544
2554
|
included_disabled_features.append("UserAgentClientHint")
|
2555
|
+
included_disabled_features.append("DisableLoadExtensionCommandLineSwitch")
|
2545
2556
|
for item in extra_disabled_features:
|
2546
2557
|
if item not in included_disabled_features:
|
2547
2558
|
included_disabled_features.append(item)
|
@@ -2819,6 +2830,8 @@ def get_driver(
|
|
2819
2830
|
if headless2 and browser_name == constants.Browser.FIREFOX:
|
2820
2831
|
headless2 = False # Only for Chromium
|
2821
2832
|
headless = True
|
2833
|
+
if binary_location and isinstance(binary_location, str):
|
2834
|
+
binary_location = binary_location.strip()
|
2822
2835
|
if (
|
2823
2836
|
is_using_uc(undetectable, browser_name)
|
2824
2837
|
and binary_location
|
@@ -3014,6 +3027,8 @@ def get_driver(
|
|
3014
3027
|
proxy_pass = None
|
3015
3028
|
proxy_scheme = "http"
|
3016
3029
|
if proxy_string:
|
3030
|
+
# (The code below was for the Chrome 137 extension fix)
|
3031
|
+
# sb_config._cdp_proxy = proxy_string
|
3017
3032
|
username_and_password = None
|
3018
3033
|
if "@" in proxy_string:
|
3019
3034
|
# Format => username:password@hostname:port
|
@@ -4450,6 +4465,9 @@ def get_local_driver(
|
|
4450
4465
|
included_disabled_features.append("PrivacySandboxSettings4")
|
4451
4466
|
included_disabled_features.append("SidePanelPinning")
|
4452
4467
|
included_disabled_features.append("UserAgentClientHint")
|
4468
|
+
included_disabled_features.append(
|
4469
|
+
"DisableLoadExtensionCommandLineSwitch"
|
4470
|
+
)
|
4453
4471
|
for item in extra_disabled_features:
|
4454
4472
|
if item not in included_disabled_features:
|
4455
4473
|
included_disabled_features.append(item)
|
@@ -5328,7 +5346,9 @@ def get_local_driver(
|
|
5328
5346
|
driver = webdriver.Chrome(
|
5329
5347
|
service=service, options=chrome_options
|
5330
5348
|
)
|
5331
|
-
return extend_driver(
|
5349
|
+
return extend_driver(
|
5350
|
+
driver, proxy_auth, use_uc, recorder_ext
|
5351
|
+
)
|
5332
5352
|
if not auto_upgrade_chromedriver:
|
5333
5353
|
raise # Not an obvious fix.
|
5334
5354
|
else:
|
@@ -5580,11 +5600,15 @@ def get_local_driver(
|
|
5580
5600
|
'Emulation.setDeviceMetricsOverride',
|
5581
5601
|
set_device_metrics_override
|
5582
5602
|
)
|
5583
|
-
return extend_driver(
|
5603
|
+
return extend_driver(
|
5604
|
+
driver, proxy_auth, use_uc, recorder_ext
|
5605
|
+
)
|
5584
5606
|
else: # Running headless on Linux (and not using --uc)
|
5585
5607
|
try:
|
5586
5608
|
driver = webdriver.Chrome(options=chrome_options)
|
5587
|
-
return extend_driver(
|
5609
|
+
return extend_driver(
|
5610
|
+
driver, proxy_auth, use_uc, recorder_ext
|
5611
|
+
)
|
5588
5612
|
except Exception as e:
|
5589
5613
|
if not hasattr(e, "msg"):
|
5590
5614
|
raise
|
@@ -5606,7 +5630,9 @@ def get_local_driver(
|
|
5606
5630
|
driver = webdriver.Chrome(
|
5607
5631
|
service=service, options=chrome_options
|
5608
5632
|
)
|
5609
|
-
return extend_driver(
|
5633
|
+
return extend_driver(
|
5634
|
+
driver, proxy_auth, use_uc, recorder_ext
|
5635
|
+
)
|
5610
5636
|
mcv = None # Major Chrome Version
|
5611
5637
|
if "Current browser version is " in e.msg:
|
5612
5638
|
line = e.msg.split("Current browser version is ")[1]
|
@@ -5649,7 +5675,9 @@ def get_local_driver(
|
|
5649
5675
|
service=service,
|
5650
5676
|
options=chrome_options,
|
5651
5677
|
)
|
5652
|
-
return extend_driver(
|
5678
|
+
return extend_driver(
|
5679
|
+
driver, proxy_auth, use_uc, recorder_ext
|
5680
|
+
)
|
5653
5681
|
# Use the virtual display on Linux during headless errors
|
5654
5682
|
logging.debug(
|
5655
5683
|
"\nWarning: Chrome failed to launch in"
|
@@ -5667,7 +5695,9 @@ def get_local_driver(
|
|
5667
5695
|
driver = webdriver.Chrome(
|
5668
5696
|
service=service, options=chrome_options
|
5669
5697
|
)
|
5670
|
-
return extend_driver(
|
5698
|
+
return extend_driver(
|
5699
|
+
driver, proxy_auth, use_uc, recorder_ext
|
5700
|
+
)
|
5671
5701
|
except Exception as original_exception:
|
5672
5702
|
if use_uc:
|
5673
5703
|
raise
|
@@ -5677,7 +5707,9 @@ def get_local_driver(
|
|
5677
5707
|
driver = webdriver.Chrome(
|
5678
5708
|
service=service, options=chrome_options
|
5679
5709
|
)
|
5680
|
-
return extend_driver(
|
5710
|
+
return extend_driver(
|
5711
|
+
driver, proxy_auth, use_uc, recorder_ext
|
5712
|
+
)
|
5681
5713
|
if user_data_dir:
|
5682
5714
|
print("\nUnable to set user_data_dir while starting Chrome!\n")
|
5683
5715
|
raise
|
@@ -5704,7 +5736,9 @@ def get_local_driver(
|
|
5704
5736
|
)
|
5705
5737
|
try:
|
5706
5738
|
driver = webdriver.Chrome(service=service)
|
5707
|
-
return extend_driver(
|
5739
|
+
return extend_driver(
|
5740
|
+
driver, proxy_auth, use_uc, recorder_ext
|
5741
|
+
)
|
5708
5742
|
except Exception:
|
5709
5743
|
raise original_exception
|
5710
5744
|
else:
|
seleniumbase/core/mysql.py
CHANGED
@@ -19,8 +19,8 @@ class DatabaseManager:
|
|
19
19
|
constants.PipInstall.FINDLOCK
|
20
20
|
)
|
21
21
|
with pip_find_lock:
|
22
|
-
if sys.version_info
|
23
|
-
# Fix bug
|
22
|
+
if sys.version_info < (3, 9):
|
23
|
+
# Fix bug with newer cryptography on Python 3.8:
|
24
24
|
# "pyo3_runtime.PanicException: Python API call failed"
|
25
25
|
# (Match the version needed for pdfminer.six functions)
|
26
26
|
try:
|
seleniumbase/core/style_sheet.py
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
import sys
|
2
1
|
import textwrap
|
3
2
|
from seleniumbase.fixtures import constants
|
4
3
|
|
@@ -11,18 +10,12 @@ class Saved:
|
|
11
10
|
def get_report_style():
|
12
11
|
if hasattr(Saved, "report_style"):
|
13
12
|
return Saved.report_style
|
14
|
-
|
15
|
-
|
16
|
-
REPORT_FAVICON = constants.Report.get_favicon()
|
17
|
-
else:
|
18
|
-
from seleniumbase.core import encoded_images
|
19
|
-
|
20
|
-
REPORT_FAVICON = encoded_images.get_report_favicon()
|
13
|
+
# Uses caching to prevent extra method calls
|
14
|
+
REPORT_FAVICON = constants.Report.get_favicon()
|
21
15
|
title = """<meta id="OGTitle" property="og:title" content="SeleniumBase">
|
22
16
|
<title>Test Report</title>
|
23
17
|
<link rel="SHORTCUT ICON"
|
24
18
|
href="%s" />""" % REPORT_FAVICON
|
25
|
-
|
26
19
|
style = (
|
27
20
|
title
|
28
21
|
+ """<style type="text/css">
|
@@ -1,5 +1,4 @@
|
|
1
1
|
import os
|
2
|
-
import sys
|
3
2
|
from seleniumbase.core import log_helper
|
4
3
|
from seleniumbase.fixtures import constants
|
5
4
|
|
@@ -22,13 +21,8 @@ def visual_baseline_folder_setup():
|
|
22
21
|
|
23
22
|
|
24
23
|
def get_sbs_head():
|
25
|
-
|
26
|
-
|
27
|
-
SIDE_BY_SIDE_PNG = constants.SideBySide.get_favicon()
|
28
|
-
else:
|
29
|
-
from seleniumbase.core import encoded_images
|
30
|
-
|
31
|
-
SIDE_BY_SIDE_PNG = encoded_images.get_side_by_side_png()
|
24
|
+
# Uses caching to prevent extra method calls
|
25
|
+
SIDE_BY_SIDE_PNG = constants.SideBySide.get_favicon()
|
32
26
|
head = (
|
33
27
|
'<head><meta charset="utf-8">'
|
34
28
|
'<meta name="viewport" content="shrink-to-fit=no">'
|
Binary file
|
@@ -10044,12 +10044,14 @@ class BaseCase(unittest.TestCase):
|
|
10044
10044
|
elif self.__is_cdp_swap_needed():
|
10045
10045
|
self.cdp.assert_text(text, selector, timeout=timeout)
|
10046
10046
|
return True
|
10047
|
-
elif not self.is_connected():
|
10048
|
-
self.connect()
|
10049
10047
|
elif self.__is_shadow_selector(selector):
|
10048
|
+
if hasattr(self, "connect") and not self.is_connected():
|
10049
|
+
self.connect()
|
10050
10050
|
self.__assert_shadow_text_visible(text, selector, timeout)
|
10051
10051
|
return True
|
10052
10052
|
else:
|
10053
|
+
if hasattr(self, "connect") and not self.is_connected():
|
10054
|
+
self.connect()
|
10053
10055
|
self.wait_for_text_visible(text, selector, by=by, timeout=timeout)
|
10054
10056
|
if self.demo_mode:
|
10055
10057
|
a_t = "ASSERT TEXT"
|
@@ -292,6 +292,7 @@ class Browser:
|
|
292
292
|
_cdp_locale = None
|
293
293
|
_cdp_platform = None
|
294
294
|
_cdp_geolocation = None
|
295
|
+
_cdp_recorder = None
|
295
296
|
if (
|
296
297
|
hasattr(sb_config, "_cdp_timezone") and sb_config._cdp_timezone
|
297
298
|
):
|
@@ -330,6 +331,8 @@ class Browser:
|
|
330
331
|
_cdp_geolocation = kwargs["geolocation"]
|
331
332
|
elif "geoloc" in kwargs:
|
332
333
|
_cdp_geolocation = kwargs["geoloc"]
|
334
|
+
if "recorder" in kwargs:
|
335
|
+
_cdp_recorder = kwargs["recorder"]
|
333
336
|
if _cdp_timezone:
|
334
337
|
await connection.send(cdp.page.navigate("about:blank"))
|
335
338
|
await connection.set_timezone(_cdp_timezone)
|
@@ -344,9 +347,37 @@ class Browser:
|
|
344
347
|
await connection.send(cdp.page.navigate("about:blank"))
|
345
348
|
await connection.set_geolocation(_cdp_geolocation)
|
346
349
|
# Use the tab to navigate to new url
|
350
|
+
if (
|
351
|
+
hasattr(sb_config, "_cdp_proxy")
|
352
|
+
and "@" in sb_config._cdp_proxy
|
353
|
+
and sb_config._cdp_proxy
|
354
|
+
and "auth" not in kwargs
|
355
|
+
):
|
356
|
+
username_and_password = sb_config._cdp_proxy.split("@")[0]
|
357
|
+
proxy_user = username_and_password.split(":")[0]
|
358
|
+
proxy_pass = username_and_password.split(":")[1]
|
359
|
+
await connection.set_auth(
|
360
|
+
proxy_user, proxy_pass, self.tabs[0]
|
361
|
+
)
|
362
|
+
time.sleep(0.25)
|
363
|
+
elif "auth" in kwargs and kwargs["auth"] and ":" in kwargs["auth"]:
|
364
|
+
username_and_password = kwargs["auth"]
|
365
|
+
proxy_user = username_and_password.split(":")[0]
|
366
|
+
proxy_pass = username_and_password.split(":")[1]
|
367
|
+
await connection.set_auth(
|
368
|
+
proxy_user, proxy_pass, self.tabs[0]
|
369
|
+
)
|
370
|
+
time.sleep(0.25)
|
347
371
|
frame_id, loader_id, *_ = await connection.send(
|
348
372
|
cdp.page.navigate(url)
|
349
373
|
)
|
374
|
+
if _cdp_recorder:
|
375
|
+
pass # (The code below was for the Chrome 137 extension fix)
|
376
|
+
'''from seleniumbase.js_code.recorder_js import recorder_js
|
377
|
+
recorder_code = (
|
378
|
+
"""window.onload = function() { %s };""" % recorder_js
|
379
|
+
)
|
380
|
+
await connection.send(cdp.runtime.evaluate(recorder_code))'''
|
350
381
|
# Update the frame_id on the tab
|
351
382
|
connection.frame_id = frame_id
|
352
383
|
connection.browser = self
|
@@ -680,6 +711,9 @@ class Browser:
|
|
680
711
|
self._process = None
|
681
712
|
self._process_pid = None
|
682
713
|
|
714
|
+
def quit(self):
|
715
|
+
self.stop()
|
716
|
+
|
683
717
|
def __await__(self):
|
684
718
|
# return ( asyncio.sleep(0)).__await__()
|
685
719
|
return self.update_targets().__await__()
|
@@ -360,8 +360,10 @@ async def start(
|
|
360
360
|
except Exception:
|
361
361
|
time.sleep(0.15)
|
362
362
|
driver = await Browser.create(config)
|
363
|
-
if proxy
|
364
|
-
|
363
|
+
if proxy:
|
364
|
+
sb_config._cdp_proxy = proxy
|
365
|
+
if "@" in str(proxy):
|
366
|
+
time.sleep(0.15)
|
365
367
|
if lang:
|
366
368
|
sb_config._cdp_locale = lang
|
367
369
|
elif "locale" in kwargs:
|
@@ -402,10 +404,14 @@ async def start_async(*args, **kwargs) -> Browser:
|
|
402
404
|
binary_location = None
|
403
405
|
if "browser_executable_path" in kwargs:
|
404
406
|
binary_location = kwargs["browser_executable_path"]
|
407
|
+
if binary_location and isinstance(binary_location, str):
|
408
|
+
binary_location = binary_location.strip()
|
405
409
|
else:
|
406
410
|
binary_location = detect_b_ver.get_binary_location("google-chrome")
|
407
|
-
if binary_location and
|
408
|
-
binary_location =
|
411
|
+
if binary_location and isinstance(binary_location, str):
|
412
|
+
binary_location = binary_location.strip()
|
413
|
+
if not os.path.exists(binary_location):
|
414
|
+
binary_location = None
|
409
415
|
if (
|
410
416
|
shared_utils.is_chrome_130_or_newer(binary_location)
|
411
417
|
and "user_data_dir" in kwargs
|
@@ -438,10 +444,14 @@ def start_sync(*args, **kwargs) -> Browser:
|
|
438
444
|
binary_location = None
|
439
445
|
if "browser_executable_path" in kwargs:
|
440
446
|
binary_location = kwargs["browser_executable_path"]
|
447
|
+
if binary_location and isinstance(binary_location, str):
|
448
|
+
binary_location = binary_location.strip()
|
441
449
|
else:
|
442
450
|
binary_location = detect_b_ver.get_binary_location("google-chrome")
|
443
|
-
if binary_location and
|
444
|
-
binary_location =
|
451
|
+
if binary_location and isinstance(binary_location, str):
|
452
|
+
binary_location = binary_location.strip()
|
453
|
+
if not os.path.exists(binary_location):
|
454
|
+
binary_location = None
|
445
455
|
if (
|
446
456
|
shared_utils.is_chrome_130_or_newer(binary_location)
|
447
457
|
and "user_data_dir" in kwargs
|
@@ -144,7 +144,8 @@ class Config:
|
|
144
144
|
"--disable-features=IsolateOrigins,site-per-process,Translate,"
|
145
145
|
"InsecureDownloadWarnings,DownloadBubble,DownloadBubbleV2,"
|
146
146
|
"OptimizationTargetPrediction,OptimizationGuideModelDownloading,"
|
147
|
-
"SidePanelPinning,UserAgentClientHint,PrivacySandboxSettings4"
|
147
|
+
"SidePanelPinning,UserAgentClientHint,PrivacySandboxSettings4,"
|
148
|
+
"DisableLoadExtensionCommandLineSwitch",
|
148
149
|
]
|
149
150
|
|
150
151
|
@property
|
@@ -378,6 +378,36 @@ class Connection(metaclass=CantTouchThis):
|
|
378
378
|
accuracy=100,
|
379
379
|
))
|
380
380
|
|
381
|
+
async def set_auth(self, username, password, tab):
|
382
|
+
async def auth_challenge_handler(event: cdp.fetch.AuthRequired):
|
383
|
+
await tab.send(
|
384
|
+
cdp.fetch.continue_with_auth(
|
385
|
+
request_id=event.request_id,
|
386
|
+
auth_challenge_response=cdp.fetch.AuthChallengeResponse(
|
387
|
+
response="ProvideCredentials",
|
388
|
+
username=username,
|
389
|
+
password=password,
|
390
|
+
),
|
391
|
+
)
|
392
|
+
)
|
393
|
+
|
394
|
+
async def req_paused(event: cdp.fetch.RequestPaused):
|
395
|
+
await tab.send(
|
396
|
+
cdp.fetch.continue_request(request_id=event.request_id)
|
397
|
+
)
|
398
|
+
|
399
|
+
tab.add_handler(
|
400
|
+
cdp.fetch.RequestPaused,
|
401
|
+
lambda event: asyncio.create_task(req_paused(event)),
|
402
|
+
)
|
403
|
+
|
404
|
+
tab.add_handler(
|
405
|
+
cdp.fetch.AuthRequired,
|
406
|
+
lambda event: asyncio.create_task(auth_challenge_handler(event)),
|
407
|
+
)
|
408
|
+
|
409
|
+
await tab.send(cdp.fetch.enable(handle_auth_requests=True))
|
410
|
+
|
381
411
|
def __getattr__(self, item):
|
382
412
|
""":meta private:"""
|
383
413
|
try:
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: seleniumbase
|
3
|
-
Version: 4.
|
3
|
+
Version: 4.39.1
|
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
|
@@ -106,7 +106,8 @@ Requires-Dist: trio-websocket==0.12.2
|
|
106
106
|
Requires-Dist: wsproto==1.2.0
|
107
107
|
Requires-Dist: websocket-client==1.8.0
|
108
108
|
Requires-Dist: selenium==4.27.1; python_version < "3.9"
|
109
|
-
Requires-Dist: selenium==4.32.0; python_version >= "3.9"
|
109
|
+
Requires-Dist: selenium==4.32.0; python_version >= "3.9" and python_version < "3.10"
|
110
|
+
Requires-Dist: selenium==4.33.0; python_version >= "3.10"
|
110
111
|
Requires-Dist: cssselect==1.2.0; python_version < "3.9"
|
111
112
|
Requires-Dist: cssselect==1.3.0; python_version >= "3.9"
|
112
113
|
Requires-Dist: sortedcontainers==2.4.0
|
@@ -120,7 +121,8 @@ Requires-Dist: pytest-metadata==3.1.1
|
|
120
121
|
Requires-Dist: pytest-ordering==0.6
|
121
122
|
Requires-Dist: pytest-rerunfailures==14.0; python_version < "3.9"
|
122
123
|
Requires-Dist: pytest-rerunfailures==15.1; python_version >= "3.9"
|
123
|
-
Requires-Dist: pytest-xdist==3.6.1
|
124
|
+
Requires-Dist: pytest-xdist==3.6.1; python_version < "3.9"
|
125
|
+
Requires-Dist: pytest-xdist==3.7.0; python_version >= "3.9"
|
124
126
|
Requires-Dist: parameterized==0.9.0
|
125
127
|
Requires-Dist: behave==1.2.6
|
126
128
|
Requires-Dist: soupsieve==2.7
|
@@ -136,7 +138,7 @@ Requires-Dist: allure-python-commons>=2.13.5; extra == "allure"
|
|
136
138
|
Requires-Dist: allure-behave>=2.13.5; extra == "allure"
|
137
139
|
Provides-Extra: coverage
|
138
140
|
Requires-Dist: coverage>=7.6.1; python_version < "3.9" and extra == "coverage"
|
139
|
-
Requires-Dist: coverage>=7.8.
|
141
|
+
Requires-Dist: coverage>=7.8.2; python_version >= "3.9" and extra == "coverage"
|
140
142
|
Requires-Dist: pytest-cov>=5.0.0; python_version < "3.9" and extra == "coverage"
|
141
143
|
Requires-Dist: pytest-cov>=6.1.1; python_version >= "3.9" and extra == "coverage"
|
142
144
|
Provides-Extra: flake8
|
@@ -157,7 +159,7 @@ Provides-Extra: pdfminer
|
|
157
159
|
Requires-Dist: pdfminer.six==20250324; python_version < "3.9" and extra == "pdfminer"
|
158
160
|
Requires-Dist: pdfminer.six==20250506; python_version >= "3.9" and extra == "pdfminer"
|
159
161
|
Requires-Dist: cryptography==39.0.2; python_version < "3.9" and extra == "pdfminer"
|
160
|
-
Requires-Dist: cryptography==45.0.
|
162
|
+
Requires-Dist: cryptography==45.0.3; python_version >= "3.9" and extra == "pdfminer"
|
161
163
|
Requires-Dist: cffi==1.17.1; extra == "pdfminer"
|
162
164
|
Requires-Dist: pycparser==2.22; extra == "pdfminer"
|
163
165
|
Provides-Extra: pillow
|
@@ -3,10 +3,10 @@ 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=bj46m18MZVWgWtHoBUoAWE_nY0f7HF4ab-r22nf_9_E,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
|
-
seleniumbase/behave/behave_sb.py,sha256=
|
9
|
+
seleniumbase/behave/behave_sb.py,sha256=bbbfa8ID6nMnmrVJ7G-014uOj5PE4B8IROZB2WXSQ8I,59172
|
10
10
|
seleniumbase/behave/steps.py,sha256=8-N-NB2tnDsxaP4LSg-uSBgbwZYMS6ZEL1oggO1PCoU,390
|
11
11
|
seleniumbase/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
12
12
|
seleniumbase/common/decorators.py,sha256=DYdjtF8Y7YJj0JS33WtmsIn4yddPoniNwcPyrgt522o,7857
|
@@ -21,22 +21,22 @@ seleniumbase/config/settings.py,sha256=cAMmoFBQ6g8GCJIsRsSwGsP1_fJxhADxjHq30lFB1
|
|
21
21
|
seleniumbase/console_scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
22
22
|
seleniumbase/console_scripts/logo_helper.py,sha256=ZqS9TAwpcu5mM5ll-a0wTbXLs2Sbcsyo3EoC4jwtnME,2927
|
23
23
|
seleniumbase/console_scripts/rich_helper.py,sha256=U_zvXpalxVV8rtg8c8EnNNmnh45tii3AV5ZV3O3KbGA,2234
|
24
|
-
seleniumbase/console_scripts/run.py,sha256=
|
25
|
-
seleniumbase/console_scripts/sb_behave_gui.py,sha256=
|
26
|
-
seleniumbase/console_scripts/sb_caseplans.py,sha256=
|
27
|
-
seleniumbase/console_scripts/sb_commander.py,sha256=
|
24
|
+
seleniumbase/console_scripts/run.py,sha256=scHfo8Zf6F7ABAGBiKHF-Vv7MOrB6qU75RRiywjDYEg,58672
|
25
|
+
seleniumbase/console_scripts/sb_behave_gui.py,sha256=CX5dTIIptsaR1xLVy53DM6haV_mIc3kYALUkkhAkfRI,14888
|
26
|
+
seleniumbase/console_scripts/sb_caseplans.py,sha256=C_vhATSa9dEDOSmHT9uk64ebkXcqM5uu8Y1S3LjATkc,17875
|
27
|
+
seleniumbase/console_scripts/sb_commander.py,sha256=Ejal4WhnMSTLcykCT04jmMuH_fvDrfIAoxoJ23LclAM,13084
|
28
28
|
seleniumbase/console_scripts/sb_install.py,sha256=PUVOlajP43t0tf7fDLntYdOMGN4Ez7K5aDgXyyIZYYk,55662
|
29
29
|
seleniumbase/console_scripts/sb_mkchart.py,sha256=ep9g-9CSIwaOJKVxhB3xjRQpfsuApyN8-Dr129cNXwQ,10941
|
30
30
|
seleniumbase/console_scripts/sb_mkdir.py,sha256=iFN6ZMOgmH_GAvEuvzYltWuYiS3PRFQcL5fJIj1yX_Y,30897
|
31
31
|
seleniumbase/console_scripts/sb_mkfile.py,sha256=OWYd4yFccmjrd-gNn1t1una-HDRU2_N2-r4Tg3nHsj0,17744
|
32
32
|
seleniumbase/console_scripts/sb_mkpres.py,sha256=EWFRVacjYTX49y-fEiYTZacM9_01IxuuaO4nMjHrIGo,11015
|
33
|
-
seleniumbase/console_scripts/sb_mkrec.py,sha256=
|
33
|
+
seleniumbase/console_scripts/sb_mkrec.py,sha256=E268227Q75ZHP1rGFoIY_6i6FzGxD_kWmKm7QMntpW4,12012
|
34
34
|
seleniumbase/console_scripts/sb_objectify.py,sha256=nGxtVGL_nHj0bLHvk86znV3EABsE2_tjF74lgto1_Mk,122020
|
35
35
|
seleniumbase/console_scripts/sb_print.py,sha256=tNy-bMDgwHJO3bZxMpmo9weSE8uhbH0CUpP4VZqWxvI,30558
|
36
|
-
seleniumbase/console_scripts/sb_recorder.py,sha256=
|
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=WD-m3IOJ2spaYelEn29bTpAOYUs9mIlCBIg7m7MZrII,242804
|
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
|
@@ -45,7 +45,7 @@ seleniumbase/core/download_helper.py,sha256=qSR54kQISucF4RQaLCOuuerSu6DR41juGi_3
|
|
45
45
|
seleniumbase/core/encoded_images.py,sha256=rDKJ4cNJSuKiRcFViYU7bjyTS9_moI57gUPRXVg3u2k,14209
|
46
46
|
seleniumbase/core/jqc_helper.py,sha256=2DDQr9Q2jSSZqFzX588jLlUM9oJvyrRWq2aORSIPUdI,10322
|
47
47
|
seleniumbase/core/log_helper.py,sha256=SW8wx2f2HfU3ERbANjxEC-jDbjy_IzaNYRKPlayfRRI,23442
|
48
|
-
seleniumbase/core/mysql.py,sha256=
|
48
|
+
seleniumbase/core/mysql.py,sha256=X1McqBWCzN9DndyBbNrVg9_kvtaByVhodiXYkGbn36A,3955
|
49
49
|
seleniumbase/core/proxy_helper.py,sha256=pZ1NboNfziHU3vWZLOZLX-qkfM3oKSnpc3omQf9EUQQ,8809
|
50
50
|
seleniumbase/core/recorder_helper.py,sha256=fNGjbapXmEsht54x1o6Igk198QdnPxDDnjUOzQxNhNQ,25055
|
51
51
|
seleniumbase/core/report_helper.py,sha256=AIl6Qava2yW1uSzbLpJBlPlYDz0KE-rVhogh8hsGWBo,12201
|
@@ -54,18 +54,18 @@ seleniumbase/core/sb_cdp.py,sha256=zgkVXOhwf94NGdsUO0eM8yVUS3s5FzSuAPJNsz3lrZo,8
|
|
54
54
|
seleniumbase/core/sb_driver.py,sha256=yvTDRblBzG6bDX7XcLiAA6QcBelSJj_HHL_04lcfeeE,13760
|
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
|
57
|
-
seleniumbase/core/style_sheet.py,sha256=
|
57
|
+
seleniumbase/core/style_sheet.py,sha256=5qYN5GLk4gkwg7nqp3h0XH5YXRijANzKDuEdalzccuw,11714
|
58
58
|
seleniumbase/core/testcase_manager.py,sha256=TblCfo8Zfap1Bayip-qTu9gqT-KALSwXAX4awBpnEHg,4633
|
59
59
|
seleniumbase/core/tour_helper.py,sha256=kj2cz-DGKlw9SX3tWnVp-snpk6Flvqj81-xmKdKDtg0,42555
|
60
|
-
seleniumbase/core/visual_helper.py,sha256=
|
60
|
+
seleniumbase/core/visual_helper.py,sha256=HxPOulfEebc9ZSwe7E-nSQJ12N2l4vhqUQubLvE2QQw,3227
|
61
61
|
seleniumbase/drivers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
62
62
|
seleniumbase/extensions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
63
63
|
seleniumbase/extensions/ad_block.zip,sha256=LTlaOYUs6a1Zu4op64pLoDEqYKJb8zHq_Y0PsBIIqCk,1454
|
64
64
|
seleniumbase/extensions/disable_csp.zip,sha256=5RvomXnm2PdivUVcxTV6jfvD8WhTEsQYHaQZe7nk9Yc,20014
|
65
|
-
seleniumbase/extensions/recorder.zip,sha256=
|
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=zlF10aFjJdRUS6nT9ksvcXPdyD7A_mlFyAgEuQkVRj4,727097
|
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
|
@@ -115,10 +115,10 @@ 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=
|
119
|
-
seleniumbase/undetected/cdp_driver/cdp_util.py,sha256=
|
120
|
-
seleniumbase/undetected/cdp_driver/config.py,sha256=
|
121
|
-
seleniumbase/undetected/cdp_driver/connection.py,sha256=
|
118
|
+
seleniumbase/undetected/cdp_driver/browser.py,sha256=EQJNg8RBBg82rJiyyo3BDpZzViqyCrnA-pnLxhpg45g,34382
|
119
|
+
seleniumbase/undetected/cdp_driver/cdp_util.py,sha256=Pjyfx4NZJ4sjRHxXjZWOvKvgki3RIJx8p4j1tCAjOpE,24868
|
120
|
+
seleniumbase/undetected/cdp_driver/config.py,sha256=4-nUkEf7JSuOdFMNd6XmJnFucZrA59-kH1FUMxDcgFU,12561
|
121
|
+
seleniumbase/undetected/cdp_driver/connection.py,sha256=DbySOlk5mQnbWtz9SOQvEDYp9ws7ZOjz2HRCARXR-dk,25649
|
122
122
|
seleniumbase/undetected/cdp_driver/element.py,sha256=FIC6v7OmumLCT-_vIc3H4oju_oBbaLpWJUJIKm2c_q4,40467
|
123
123
|
seleniumbase/undetected/cdp_driver/tab.py,sha256=t7Ucn0pmm7imwdCM-5KmIJNU2MCeMuIl6G3T2VMrbxU,53170
|
124
124
|
seleniumbase/utilities/__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.
|
139
|
-
seleniumbase-4.
|
140
|
-
seleniumbase-4.
|
141
|
-
seleniumbase-4.
|
142
|
-
seleniumbase-4.
|
143
|
-
seleniumbase-4.
|
138
|
+
seleniumbase-4.39.1.dist-info/licenses/LICENSE,sha256=BRblZsX7HyPUjQmYTiyWr_e9tzWvmR3R4SFclM2R3W0,1085
|
139
|
+
seleniumbase-4.39.1.dist-info/METADATA,sha256=mouLj0Wi78TD1BfpXwhjXZ15pNjBBFwDaMXB0bHy5dg,87206
|
140
|
+
seleniumbase-4.39.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
141
|
+
seleniumbase-4.39.1.dist-info/entry_points.txt,sha256=CNrh2EKNaHYEhO6pP1RJyVLB99LkDDYX7TnUK8xfjqk,623
|
142
|
+
seleniumbase-4.39.1.dist-info/top_level.txt,sha256=4N97aBOQ8ETCnDnokBsWb07lJfTaq3C1ZzYRxvLMxqU,19
|
143
|
+
seleniumbase-4.39.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|