19
19
selenium4 = False
20
20
if sys .version_info [0 ] == 3 and sys .version_info [1 ] >= 7 :
21
21
selenium4 = True
22
+ from selenium .webdriver .common .options import ArgOptions
23
+
22
24
DRIVER_DIR = os .path .dirname (os .path .realpath (drivers .__file__ ))
23
25
# Make sure that the SeleniumBase DRIVER_DIR is at the top of the System PATH
24
26
# (Changes to the System PATH with os.environ only last during the test run)
@@ -962,15 +964,28 @@ def get_remote_driver(
962
964
device_height ,
963
965
device_pixel_ratio ,
964
966
)
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
966
973
for key in desired_caps .keys ():
967
974
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
+ )
974
989
elif browser_name == constants .Browser .FIREFOX :
975
990
firefox_options = _set_firefox_options (
976
991
downloads_path ,
@@ -982,60 +997,115 @@ def get_remote_driver(
982
997
firefox_arg ,
983
998
firefox_pref ,
984
999
)
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 ()
986
1005
capabilities ["marionette" ] = True
987
1006
if "linux" in PLATFORM :
988
1007
if headless :
989
1008
capabilities ["moz:firefoxOptions" ] = {"args" : ["-headless" ]}
1009
+ # Set custom desired capabilities
990
1010
for key in desired_caps .keys ():
991
1011
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
+ )
998
1026
elif browser_name == constants .Browser .INTERNET_EXPLORER :
999
1027
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
+ )
1008
1045
elif browser_name == constants .Browser .EDGE :
1009
1046
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
+ )
1018
1064
elif browser_name == constants .Browser .SAFARI :
1019
1065
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
+ )
1028
1083
elif browser_name == constants .Browser .OPERA :
1029
1084
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
+ )
1038
1102
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 )
1039
1109
capabilities = webdriver .DesiredCapabilities .PHANTOMJS
1040
1110
for key in desired_caps .keys ():
1041
1111
capabilities [key ] = desired_caps [key ]
@@ -1049,37 +1119,77 @@ def get_remote_driver(
1049
1119
)
1050
1120
elif browser_name == constants .Browser .ANDROID :
1051
1121
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
+ )
1059
1139
elif browser_name == constants .Browser .IPHONE :
1060
1140
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
+ )
1068
1158
elif browser_name == constants .Browser .IPAD :
1069
1159
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
+ )
1077
1177
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
+ )
1083
1193
1084
1194
1085
1195
def get_local_driver (
@@ -1559,6 +1669,12 @@ def get_local_driver(
1559
1669
except Exception :
1560
1670
return webdriver .Opera ()
1561
1671
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 )
1562
1678
with warnings .catch_warnings ():
1563
1679
# Ignore "PhantomJS has been deprecated" UserWarning
1564
1680
warnings .simplefilter ("ignore" , category = UserWarning )
0 commit comments