Skip to content

Commit 8222852

Browse files
committed
Headless support for all browsers
1 parent 21eb392 commit 8222852

2 files changed

Lines changed: 86 additions & 43 deletions

File tree

‎src/SeleniumLibrary/keywords/browsermanagement.py‎

Lines changed: 84 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,7 @@
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

‎test/unit/keywords/test_keyword_arguments_browsermanagement.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@ def test_open_browser(self):
2020
remote_url = '"http://localhost:4444/wd/hub"'
2121
browser = mock()
2222
when(self.brorser)._make_driver('firefox', None,
23-
None, False).thenReturn(browser)
23+
None, False, False).thenReturn(browser)
2424
alias = self.brorser.open_browser(url)
2525
self.assertEqual(alias, None)
2626

2727
when(self.brorser)._make_driver('firefox', None,
28-
None, remote_url).thenReturn(browser)
28+
None, remote_url, False).thenReturn(browser)
2929
alias = self.brorser.open_browser(url, alias='None',
3030
remote_url=remote_url)
3131
self.assertEqual(alias, None)

0 commit comments

Comments
 (0)