1111from seleniumbase .config import proxy_list
1212from seleniumbase .core import download_helper
1313from seleniumbase .core import proxy_helper
14+ from seleniumbase .core import capabilities_parser
1415from seleniumbase .fixtures import constants
1516from seleniumbase .fixtures import page_utils
1617from seleniumbase import drivers # webdriver storage folder for SeleniumBase
@@ -187,7 +188,8 @@ def validate_proxy_string(proxy_string):
187188
188189
189190def get_driver (browser_name , headless = False , use_grid = False ,
190- servername = 'localhost' , port = 4444 , proxy_string = None ):
191+ servername = 'localhost' , port = 4444 , proxy_string = None ,
192+ cap_file = None ):
191193 proxy_auth = False
192194 proxy_user = None
193195 proxy_pass = None
@@ -216,7 +218,7 @@ def get_driver(browser_name, headless=False, use_grid=False,
216218 if use_grid :
217219 return get_remote_driver (
218220 browser_name , headless , servername , port , proxy_string , proxy_auth ,
219- proxy_user , proxy_pass )
221+ proxy_user , proxy_pass , cap_file )
220222 else :
221223 return get_local_driver (
222224 browser_name , headless , proxy_string , proxy_auth ,
@@ -225,10 +227,13 @@ def get_driver(browser_name, headless=False, use_grid=False,
225227
226228def get_remote_driver (
227229 browser_name , headless , servername , port , proxy_string , proxy_auth ,
228- proxy_user , proxy_pass ):
230+ proxy_user , proxy_pass , cap_file ):
229231 downloads_path = download_helper .get_downloads_folder ()
230232 download_helper .reset_downloads_folder ()
231233 address = "http://%s:%s/wd/hub" % (servername , port )
234+ desired_caps = {}
235+ if cap_file :
236+ desired_caps = capabilities_parser .get_desired_capabilities (cap_file )
232237
233238 if browser_name == constants .Browser .GOOGLE_CHROME :
234239 chrome_options = _set_chrome_options (
@@ -239,6 +244,8 @@ def get_remote_driver(
239244 chrome_options .add_argument ("--disable-gpu" )
240245 chrome_options .add_argument ("--no-sandbox" )
241246 capabilities = chrome_options .to_capabilities ()
247+ for key in desired_caps .keys ():
248+ capabilities [key ] = desired_caps [key ]
242249 return webdriver .Remote (
243250 command_executor = address ,
244251 desired_capabilities = capabilities )
@@ -251,6 +258,8 @@ def get_remote_driver(
251258 if headless :
252259 firefox_capabilities ['moz:firefoxOptions' ] = (
253260 {'args' : ['-headless' ]})
261+ for key in desired_caps .keys ():
262+ firefox_capabilities [key ] = desired_caps [key ]
254263 capabilities = firefox_capabilities
255264 address = "http://%s:%s/wd/hub" % (servername , port )
256265 return webdriver .Remote (
@@ -265,39 +274,76 @@ def get_remote_driver(
265274 if headless :
266275 firefox_capabilities ['moz:firefoxOptions' ] = (
267276 {'args' : ['-headless' ]})
277+ for key in desired_caps .keys ():
278+ firefox_capabilities [key ] = desired_caps [key ]
268279 capabilities = firefox_capabilities
269280 return webdriver .Remote (
270281 command_executor = address ,
271282 desired_capabilities = capabilities ,
272283 browser_profile = profile )
273284 elif browser_name == constants .Browser .INTERNET_EXPLORER :
285+ capabilities = webdriver .DesiredCapabilities .INTERNETEXPLORER
286+ for key in desired_caps .keys ():
287+ capabilities [key ] = desired_caps [key ]
274288 return webdriver .Remote (
275289 command_executor = address ,
276- desired_capabilities = (
277- webdriver .DesiredCapabilities .INTERNETEXPLORER ))
290+ desired_capabilities = capabilities )
278291 elif browser_name == constants .Browser .EDGE :
292+ capabilities = webdriver .DesiredCapabilities .EDGE
293+ for key in desired_caps .keys ():
294+ capabilities [key ] = desired_caps [key ]
279295 return webdriver .Remote (
280296 command_executor = address ,
281- desired_capabilities = (
282- webdriver .DesiredCapabilities .EDGE ))
297+ desired_capabilities = capabilities )
283298 elif browser_name == constants .Browser .SAFARI :
299+ capabilities = webdriver .DesiredCapabilities .SAFARI
300+ for key in desired_caps .keys ():
301+ capabilities [key ] = desired_caps [key ]
284302 return webdriver .Remote (
285303 command_executor = address ,
286- desired_capabilities = (
287- webdriver .DesiredCapabilities .SAFARI ))
304+ desired_capabilities = capabilities )
288305 elif browser_name == constants .Browser .OPERA :
306+ capabilities = webdriver .DesiredCapabilities .OPERA
307+ for key in desired_caps .keys ():
308+ capabilities [key ] = desired_caps [key ]
289309 return webdriver .Remote (
290310 command_executor = address ,
291- desired_capabilities = (
292- webdriver .DesiredCapabilities .OPERA ))
311+ desired_capabilities = capabilities )
293312 elif browser_name == constants .Browser .PHANTOM_JS :
313+ capabilities = webdriver .DesiredCapabilities .PHANTOMJS
314+ for key in desired_caps .keys ():
315+ capabilities [key ] = desired_caps [key ]
294316 with warnings .catch_warnings ():
295317 # Ignore "PhantomJS has been deprecated" UserWarning
296318 warnings .simplefilter ("ignore" , category = UserWarning )
297319 return webdriver .Remote (
298320 command_executor = address ,
299- desired_capabilities = (
300- webdriver .DesiredCapabilities .PHANTOMJS ))
321+ desired_capabilities = capabilities )
322+ elif browser_name == constants .Browser .ANDROID :
323+ capabilities = webdriver .DesiredCapabilities .ANDROID
324+ for key in desired_caps .keys ():
325+ capabilities [key ] = desired_caps [key ]
326+ return webdriver .Remote (
327+ command_executor = address ,
328+ desired_capabilities = capabilities )
329+ elif browser_name == constants .Browser .IPHONE :
330+ capabilities = webdriver .DesiredCapabilities .IPHONE
331+ for key in desired_caps .keys ():
332+ capabilities [key ] = desired_caps [key ]
333+ return webdriver .Remote (
334+ command_executor = address ,
335+ desired_capabilities = capabilities )
336+ elif browser_name == constants .Browser .IPAD :
337+ capabilities = webdriver .DesiredCapabilities .IPAD
338+ for key in desired_caps .keys ():
339+ capabilities [key ] = desired_caps [key ]
340+ return webdriver .Remote (
341+ command_executor = address ,
342+ desired_capabilities = capabilities )
343+ elif browser_name == constants .Browser .REMOTE :
344+ return webdriver .Remote (
345+ command_executor = address ,
346+ desired_capabilities = desired_caps )
301347
302348
303349def get_local_driver (
@@ -418,3 +464,6 @@ def get_local_driver(
418464 return webdriver .Chrome (executable_path = LOCAL_CHROMEDRIVER )
419465 else :
420466 return webdriver .Chrome ()
467+ else :
468+ raise Exception (
469+ "%s is not a valid browser option for this system!" % browser_name )
0 commit comments