Skip to content

Commit 360d80c

Browse files
committed
Use "options" instead of "desired_capabilities" as needed
1 parent 3d7d272 commit 360d80c

File tree

1 file changed

+188
-72
lines changed

1 file changed

+188
-72
lines changed

seleniumbase/core/browser_launcher.py

Lines changed: 188 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
selenium4 = False
2020
if sys.version_info[0] == 3 and sys.version_info[1] >= 7:
2121
selenium4 = True
22+
from selenium.webdriver.common.options import ArgOptions
23+
2224
DRIVER_DIR = os.path.dirname(os.path.realpath(drivers.__file__))
2325
# Make sure that the SeleniumBase DRIVER_DIR is at the top of the System PATH
2426
# (Changes to the System PATH with os.environ only last during the test run)
@@ -962,15 +964,28 @@ def get_remote_driver(
962964
device_height,
963965
device_pixel_ratio,
964966
)
965-
capabilities = chrome_options.to_capabilities()
967+
capabilities = None
968+
if selenium4:
969+
capabilities = webdriver.ChromeOptions().to_capabilities()
970+
else:
971+
capabilities = chrome_options.to_capabilities()
972+
# Set custom desired capabilities
966973
for key in desired_caps.keys():
967974
capabilities[key] = desired_caps[key]
968-
warnings.simplefilter("ignore", category=DeprecationWarning)
969-
return webdriver.Remote(
970-
command_executor=address,
971-
desired_capabilities=capabilities,
972-
keep_alive=True,
973-
)
975+
if selenium4:
976+
chrome_options.set_capability("cloud:options", capabilities)
977+
return webdriver.Remote(
978+
command_executor=address,
979+
options=chrome_options,
980+
keep_alive=True,
981+
)
982+
else:
983+
warnings.simplefilter("ignore", category=DeprecationWarning)
984+
return webdriver.Remote(
985+
command_executor=address,
986+
desired_capabilities=capabilities,
987+
keep_alive=True,
988+
)
974989
elif browser_name == constants.Browser.FIREFOX:
975990
firefox_options = _set_firefox_options(
976991
downloads_path,
@@ -982,60 +997,115 @@ def get_remote_driver(
982997
firefox_arg,
983998
firefox_pref,
984999
)
985-
capabilities = firefox_options.to_capabilities()
1000+
capabilities = None
1001+
if selenium4:
1002+
capabilities = webdriver.FirefoxOptions().to_capabilities()
1003+
else:
1004+
capabilities = firefox_options.to_capabilities()
9861005
capabilities["marionette"] = True
9871006
if "linux" in PLATFORM:
9881007
if headless:
9891008
capabilities["moz:firefoxOptions"] = {"args": ["-headless"]}
1009+
# Set custom desired capabilities
9901010
for key in desired_caps.keys():
9911011
capabilities[key] = desired_caps[key]
992-
warnings.simplefilter("ignore", category=DeprecationWarning)
993-
return webdriver.Remote(
994-
command_executor=address,
995-
desired_capabilities=capabilities,
996-
keep_alive=True,
997-
)
1012+
if selenium4:
1013+
firefox_options.set_capability("cloud:options", capabilities)
1014+
return webdriver.Remote(
1015+
command_executor=address,
1016+
options=firefox_options,
1017+
keep_alive=True,
1018+
)
1019+
else:
1020+
warnings.simplefilter("ignore", category=DeprecationWarning)
1021+
return webdriver.Remote(
1022+
command_executor=address,
1023+
desired_capabilities=capabilities,
1024+
keep_alive=True,
1025+
)
9981026
elif browser_name == constants.Browser.INTERNET_EXPLORER:
9991027
capabilities = webdriver.DesiredCapabilities.INTERNETEXPLORER
1000-
for key in desired_caps.keys():
1001-
capabilities[key] = desired_caps[key]
1002-
warnings.simplefilter("ignore", category=DeprecationWarning)
1003-
return webdriver.Remote(
1004-
command_executor=address,
1005-
desired_capabilities=capabilities,
1006-
keep_alive=True,
1007-
)
1028+
if selenium4:
1029+
remote_options = ArgOptions()
1030+
remote_options.set_capability("cloud:options", desired_caps)
1031+
return webdriver.Remote(
1032+
command_executor=address,
1033+
options=remote_options,
1034+
keep_alive=True,
1035+
)
1036+
else:
1037+
warnings.simplefilter("ignore", category=DeprecationWarning)
1038+
for key in desired_caps.keys():
1039+
capabilities[key] = desired_caps[key]
1040+
return webdriver.Remote(
1041+
command_executor=address,
1042+
desired_capabilities=capabilities,
1043+
keep_alive=True,
1044+
)
10081045
elif browser_name == constants.Browser.EDGE:
10091046
capabilities = webdriver.DesiredCapabilities.EDGE
1010-
for key in desired_caps.keys():
1011-
capabilities[key] = desired_caps[key]
1012-
warnings.simplefilter("ignore", category=DeprecationWarning)
1013-
return webdriver.Remote(
1014-
command_executor=address,
1015-
desired_capabilities=capabilities,
1016-
keep_alive=True,
1017-
)
1047+
if selenium4:
1048+
remote_options = ArgOptions()
1049+
remote_options.set_capability("cloud:options", desired_caps)
1050+
return webdriver.Remote(
1051+
command_executor=address,
1052+
options=remote_options,
1053+
keep_alive=True,
1054+
)
1055+
else:
1056+
warnings.simplefilter("ignore", category=DeprecationWarning)
1057+
for key in desired_caps.keys():
1058+
capabilities[key] = desired_caps[key]
1059+
return webdriver.Remote(
1060+
command_executor=address,
1061+
desired_capabilities=capabilities,
1062+
keep_alive=True,
1063+
)
10181064
elif browser_name == constants.Browser.SAFARI:
10191065
capabilities = webdriver.DesiredCapabilities.SAFARI
1020-
for key in desired_caps.keys():
1021-
capabilities[key] = desired_caps[key]
1022-
warnings.simplefilter("ignore", category=DeprecationWarning)
1023-
return webdriver.Remote(
1024-
command_executor=address,
1025-
desired_capabilities=capabilities,
1026-
keep_alive=True,
1027-
)
1066+
if selenium4:
1067+
remote_options = ArgOptions()
1068+
remote_options.set_capability("cloud:options", desired_caps)
1069+
return webdriver.Remote(
1070+
command_executor=address,
1071+
options=remote_options,
1072+
keep_alive=True,
1073+
)
1074+
else:
1075+
warnings.simplefilter("ignore", category=DeprecationWarning)
1076+
for key in desired_caps.keys():
1077+
capabilities[key] = desired_caps[key]
1078+
return webdriver.Remote(
1079+
command_executor=address,
1080+
desired_capabilities=capabilities,
1081+
keep_alive=True,
1082+
)
10281083
elif browser_name == constants.Browser.OPERA:
10291084
capabilities = webdriver.DesiredCapabilities.OPERA
1030-
for key in desired_caps.keys():
1031-
capabilities[key] = desired_caps[key]
1032-
warnings.simplefilter("ignore", category=DeprecationWarning)
1033-
return webdriver.Remote(
1034-
command_executor=address,
1035-
desired_capabilities=capabilities,
1036-
keep_alive=True,
1037-
)
1085+
if selenium4:
1086+
remote_options = ArgOptions()
1087+
remote_options.set_capability("cloud:options", desired_caps)
1088+
return webdriver.Remote(
1089+
command_executor=address,
1090+
options=remote_options,
1091+
keep_alive=True,
1092+
)
1093+
else:
1094+
warnings.simplefilter("ignore", category=DeprecationWarning)
1095+
for key in desired_caps.keys():
1096+
capabilities[key] = desired_caps[key]
1097+
return webdriver.Remote(
1098+
command_executor=address,
1099+
desired_capabilities=capabilities,
1100+
keep_alive=True,
1101+
)
10381102
elif browser_name == constants.Browser.PHANTOM_JS:
1103+
if selenium4:
1104+
message = (
1105+
"\n"
1106+
"PhantomJS is no longer available for Selenium 4!\n"
1107+
'Try using "--headless" mode with Chrome instead!')
1108+
raise Exception(message)
10391109
capabilities = webdriver.DesiredCapabilities.PHANTOMJS
10401110
for key in desired_caps.keys():
10411111
capabilities[key] = desired_caps[key]
@@ -1049,37 +1119,77 @@ def get_remote_driver(
10491119
)
10501120
elif browser_name == constants.Browser.ANDROID:
10511121
capabilities = webdriver.DesiredCapabilities.ANDROID
1052-
for key in desired_caps.keys():
1053-
capabilities[key] = desired_caps[key]
1054-
return webdriver.Remote(
1055-
command_executor=address,
1056-
desired_capabilities=capabilities,
1057-
keep_alive=True,
1058-
)
1122+
if selenium4:
1123+
remote_options = ArgOptions()
1124+
remote_options.set_capability("cloud:options", desired_caps)
1125+
return webdriver.Remote(
1126+
command_executor=address,
1127+
options=remote_options,
1128+
keep_alive=True,
1129+
)
1130+
else:
1131+
warnings.simplefilter("ignore", category=DeprecationWarning)
1132+
for key in desired_caps.keys():
1133+
capabilities[key] = desired_caps[key]
1134+
return webdriver.Remote(
1135+
command_executor=address,
1136+
desired_capabilities=capabilities,
1137+
keep_alive=True,
1138+
)
10591139
elif browser_name == constants.Browser.IPHONE:
10601140
capabilities = webdriver.DesiredCapabilities.IPHONE
1061-
for key in desired_caps.keys():
1062-
capabilities[key] = desired_caps[key]
1063-
return webdriver.Remote(
1064-
command_executor=address,
1065-
desired_capabilities=capabilities,
1066-
keep_alive=True,
1067-
)
1141+
if selenium4:
1142+
remote_options = ArgOptions()
1143+
remote_options.set_capability("cloud:options", desired_caps)
1144+
return webdriver.Remote(
1145+
command_executor=address,
1146+
options=remote_options,
1147+
keep_alive=True,
1148+
)
1149+
else:
1150+
warnings.simplefilter("ignore", category=DeprecationWarning)
1151+
for key in desired_caps.keys():
1152+
capabilities[key] = desired_caps[key]
1153+
return webdriver.Remote(
1154+
command_executor=address,
1155+
desired_capabilities=capabilities,
1156+
keep_alive=True,
1157+
)
10681158
elif browser_name == constants.Browser.IPAD:
10691159
capabilities = webdriver.DesiredCapabilities.IPAD
1070-
for key in desired_caps.keys():
1071-
capabilities[key] = desired_caps[key]
1072-
return webdriver.Remote(
1073-
command_executor=address,
1074-
desired_capabilities=capabilities,
1075-
keep_alive=True,
1076-
)
1160+
if selenium4:
1161+
remote_options = ArgOptions()
1162+
remote_options.set_capability("cloud:options", desired_caps)
1163+
return webdriver.Remote(
1164+
command_executor=address,
1165+
options=remote_options,
1166+
keep_alive=True,
1167+
)
1168+
else:
1169+
warnings.simplefilter("ignore", category=DeprecationWarning)
1170+
for key in desired_caps.keys():
1171+
capabilities[key] = desired_caps[key]
1172+
return webdriver.Remote(
1173+
command_executor=address,
1174+
desired_capabilities=capabilities,
1175+
keep_alive=True,
1176+
)
10771177
elif browser_name == constants.Browser.REMOTE:
1078-
return webdriver.Remote(
1079-
command_executor=address,
1080-
desired_capabilities=desired_caps,
1081-
keep_alive=True,
1082-
)
1178+
if selenium4:
1179+
remote_options = ArgOptions()
1180+
remote_options.set_capability("cloud:options", desired_caps)
1181+
return webdriver.Remote(
1182+
command_executor=address,
1183+
options=remote_options,
1184+
keep_alive=True,
1185+
)
1186+
else:
1187+
warnings.simplefilter("ignore", category=DeprecationWarning)
1188+
return webdriver.Remote(
1189+
command_executor=address,
1190+
desired_capabilities=desired_caps,
1191+
keep_alive=True,
1192+
)
10831193

10841194

10851195
def get_local_driver(
@@ -1559,6 +1669,12 @@ def get_local_driver(
15591669
except Exception:
15601670
return webdriver.Opera()
15611671
elif browser_name == constants.Browser.PHANTOM_JS:
1672+
if selenium4:
1673+
message = (
1674+
"\n"
1675+
"PhantomJS is no longer available for Selenium 4!\n"
1676+
'Try using "--headless" mode with Chrome instead!')
1677+
raise Exception(message)
15621678
with warnings.catch_warnings():
15631679
# Ignore "PhantomJS has been deprecated" UserWarning
15641680
warnings.simplefilter("ignore", category=UserWarning)

0 commit comments

Comments
 (0)