4444 'android' : "_make_android" ,
4545 'iphone' : "_make_iphone" ,
4646 'safari' : "_make_safari" ,
47- 'edge' : "_make_edge" ,
48- 'headlessfirefox' : '_make_headless_ff' ,
49- 'headlessff' : '_make_headless_ff' ,
50- 'headlessgooglechrome' : '_make_headless_chrome' ,
51- 'headlessgc' : '_make_headless_chrome' ,
52- 'headlesschrome' : '_make_headless_chrome'
47+ 'edge' : "_make_edge"
5348})
5449
5550
@@ -444,84 +439,123 @@ def _make_driver(self, browser_name, desired_capabilities=None,
444439 profile_dir = None , remote = None , headless = False ):
445440 creation_func = self ._get_driver_creation_function (browser_name )
446441
447- if is_truthy (headless ):
448- try :
449- options = webdriver .FirefoxOptions ()
450- options .set_headless ()
451- except AttributeError :
452- print ('asdfasdfasdfasdfasdfdsa' )
453- options = None
454- else :
455- options = None
456-
457- driver = creation_func (remote , desired_capabilities , profile_dir , options = options )
442+ driver = creation_func (remote , desired_capabilities , profile_dir , headless )
458443 driver .set_script_timeout (self .ctx .timeout )
459444 driver .implicitly_wait (self .ctx .implicit_wait )
460445 if self .ctx .speed :
461446 self ._monkey_patch_speed (driver )
462447 return driver
463448
464- def _make_ff (self , remote , desired_capabilities , profile_dir , options = None ):
449+ def _make_ff (self , remote , desired_capabilities , profile_dir , headless = False ):
450+ if is_truthy (headless ):
451+ options = webdriver .FirefoxOptions ()
452+ options .set_headless ()
453+ else :
454+ options = None
465455 if is_falsy (profile_dir ):
466456 profile = webdriver .FirefoxProfile ()
467457 else :
468458 profile = webdriver .FirefoxProfile (profile_dir )
469459 if is_truthy (remote ):
470- driver = self ._create_remote_web_driver (
471- webdriver .DesiredCapabilities .FIREFOX , remote ,
472- desired_capabilities , profile , options = options )
460+ if options is None :
461+ driver = self ._create_remote_web_driver (
462+ webdriver .DesiredCapabilities .FIREFOX , remote ,
463+ desired_capabilities , profile )
464+ else :
465+ driver = self ._create_remote_web_driver (
466+ webdriver .DesiredCapabilities .FIREFOX , remote ,
467+ desired_capabilities , profile , options = options )
473468 else :
474- driver = webdriver .Firefox (firefox_profile = profile ,
475- options = options ,
476- ** self ._geckodriver_log_config )
469+ if options is None :
470+ driver = webdriver .Firefox (firefox_profile = profile ,
471+ ** self ._geckodriver_log_config )
472+ else :
473+ driver = webdriver .Firefox (firefox_profile = profile ,
474+ options = options ,
475+ ** self ._geckodriver_log_config )
477476 return driver
478477
479- def _make_ie (self , remote , desired_capabilities , profile_dir , options = None ):
478+ def _make_ie (self , remote , desired_capabilities , profile_dir , headless = False ):
479+ if is_truthy (headless ):
480+ options = webdriver .IeOptions ()
481+ options .set_headless ()
482+ else :
483+ options = None
480484 return self ._generic_make_driver (
481485 webdriver .Ie , webdriver .DesiredCapabilities .INTERNETEXPLORER ,
482486 remote , desired_capabilities , options = options )
483487
484- def _make_chrome (self , remote , desired_capabilities , profile_dir , options = None ):
488+ def _make_chrome (self , remote , desired_capabilities , profile_dir , headless = False ):
489+ if is_truthy (headless ):
490+ options = webdriver .ChromeOptions ()
491+ options .set_headless ()
492+ else :
493+ options = None
485494 return self ._generic_make_driver (
486495 webdriver .Chrome , webdriver .DesiredCapabilities .CHROME , remote ,
487496 desired_capabilities , options = options )
488497
489- def _make_opera (self , remote , desired_capabilities , profile_dir , options = None ):
498+ def _make_opera (self , remote , desired_capabilities , profile_dir , headless = False ):
499+ if is_truthy (headless ):
500+ options = webdriver .OperaOptions ()
501+ options .set_headless ()
502+ else :
503+ options = None
490504 return self ._generic_make_driver (
491505 webdriver .Opera , webdriver .DesiredCapabilities .OPERA , remote ,
492506 desired_capabilities , options = options )
493507
494- def _make_phantomjs (self , remote , desired_capabilities , profile_dir , options = None ):
508+ def _make_phantomjs (self , remote , desired_capabilities , profile_dir , headless = True ):
495509 return self ._generic_make_driver (
496510 webdriver .PhantomJS , webdriver .DesiredCapabilities .PHANTOMJS ,
497- remote , desired_capabilities , options = options )
511+ remote , desired_capabilities )
498512
499- def _make_htmlunit (self , remote , desired_capabilities , profile_dir , options = None ):
513+ def _make_htmlunit (self , remote , desired_capabilities , profile_dir , headless = True ):
500514 return self ._generic_make_driver (
501515 webdriver .Remote , webdriver .DesiredCapabilities .HTMLUNIT , remote ,
502- desired_capabilities , options = options )
516+ desired_capabilities )
503517
504- def _make_htmlunitwithjs (self , remote , desired_capabilities , profile_dir , options = None ):
518+ def _make_htmlunitwithjs (self , remote , desired_capabilities , profile_dir , headless = True ):
505519 return self ._generic_make_driver (
506520 webdriver .Remote , webdriver .DesiredCapabilities .HTMLUNITWITHJS ,
507- remote , desired_capabilities , options = options )
521+ remote , desired_capabilities )
508522
509- def _make_android (self , remote , desired_capabilities , profile_dir , options = None ):
523+ def _make_android (self , remote , desired_capabilities , profile_dir , headless = False ):
524+ if is_truthy (headless ):
525+ options = webdriver .AndroidOptions ()
526+ options .set_headless ()
527+ else :
528+ options = None
510529 return self ._generic_make_driver (
511530 webdriver .Remote , webdriver .DesiredCapabilities .ANDROID , remote ,
512531 desired_capabilities , options = options )
513532
514- def _make_iphone (self , remote , desired_capabilities , profile_dir , options = None ):
533+ def _make_iphone (self , remote , desired_capabilities , profile_dir , headless = False ):
534+ if is_truthy (headless ):
535+ options = webdriver .IphoneOptions ()
536+ options .set_headless ()
537+ else :
538+ options = None
515539 return self ._generic_make_driver (
516540 webdriver .Remote , webdriver .DesiredCapabilities .IPHONE , remote ,
517541 desired_capabilities , options = options )
518542
519- def _make_safari (self , remote , desired_capabilities , profile_dir , options = None ):
543+ def _make_safari (self , remote , desired_capabilities , profile_dir , headless = False ):
544+ if is_truthy (headless ):
545+ options = webdriver .SafariOptions ()
546+ options .set_headless ()
547+ else :
548+ options = None
520549 return self ._generic_make_driver (
521550 webdriver .Safari , webdriver .DesiredCapabilities .SAFARI , remote ,
522551 desired_capabilities , options = options )
523552
524- def _make_edge (self , remote , desired_capabilities , profile_dir , options = None ):
553+ def _make_edge (self , remote , desired_capabilities , profile_dir , headless = False ):
554+ if is_truthy (headless ):
555+ options = webdriver .EdgeOptions ()
556+ options .set_headless ()
557+ else :
558+ options = None
525559 return self ._generic_make_driver (
526560 webdriver .Edge , webdriver .DesiredCapabilities .EDGE , remote ,
527561 desired_capabilities , options = options )
@@ -539,7 +573,11 @@ def _generic_make_driver(self, webdriver_type, desired_cap_type,
539573 else :
540574 driver = webdriver_type (options = options )
541575 else :
542- driver = self ._create_remote_web_driver (desired_cap_type ,
576+ if options is None :
577+ driver = self ._create_remote_web_driver (desired_cap_type ,
578+ remote_url , desired_caps )
579+ else :
580+ driver = self ._create_remote_web_driver (desired_cap_type ,
543581 remote_url , desired_caps ,
544582 options = options )
545583 return driver
@@ -554,9 +592,14 @@ def _create_remote_web_driver(self, capabilities_type, remote_url,
554592 if not isinstance (desired_capabilities , dict ):
555593 desired_capabilities = self ._parse_capabilities_string (desired_capabilities )
556594 desired_capabilities_object .update (desired_capabilities or {})
557- return webdriver .Remote (desired_capabilities = desired_capabilities_object ,
558- command_executor = str (remote_url ), browser_profile = profile ,
559- options = options )
595+ if options is None :
596+ driver = webdriver .Remote (desired_capabilities = desired_capabilities_object ,
597+ command_executor = str (remote_url ), browser_profile = profile )
598+ else :
599+ driver = webdriver .Remote (desired_capabilities = desired_capabilities_object ,
600+ command_executor = str (remote_url ), browser_profile = profile ,
601+ options = options )
602+ return driver
560603
561604 def _parse_capabilities_string (self , capabilities_string ):
562605 '''parses the string based desired_capabilities which should be in the form
0 commit comments