From b23987ec7d04a4df1748b812cbc94374b17cc2c1 Mon Sep 17 00:00:00 2001 From: Tatu Aalto Date: Thu, 3 Jan 2019 00:04:08 +0200 Subject: [PATCH 1/2] Fixes regression caused by 159206fb If Open Browser keyword desired_capabilities is a dict, then Open Browser keyword fails --- atest/acceptance/open_and_close.robot | 5 +++++ .../keywords/webdrivertools.py | 21 +++++++++++-------- utest/test/keywords/test_webdrivercreator.py | 16 ++++++++++++-- 3 files changed, 31 insertions(+), 11 deletions(-) diff --git a/atest/acceptance/open_and_close.robot b/atest/acceptance/open_and_close.robot index 6a10a71a7..f5f457fc5 100644 --- a/atest/acceptance/open_and_close.robot +++ b/atest/acceptance/open_and_close.robot @@ -76,3 +76,8 @@ Get Session Id Run Keyword And Expect Error ... No browser with index or alias 'Browser 2' found. ... Switch Browser Browser 2 + +Open Browser desired_capabilities As Dictionary + ${caps} Create Dictionary foo=${True} + Open Browser ${ROOT}/forms/prefilled_email_form.html ${BROWSER} + ... remote_url=${REMOTE_URL} desired_capabilities=${caps} diff --git a/src/SeleniumLibrary/keywords/webdrivertools.py b/src/SeleniumLibrary/keywords/webdrivertools.py index 159c84026..684b4736c 100644 --- a/src/SeleniumLibrary/keywords/webdrivertools.py +++ b/src/SeleniumLibrary/keywords/webdrivertools.py @@ -65,22 +65,25 @@ def _get_creator_method(self, browser): raise ValueError('{} is not a supported browser.'.format(browser)) def _parse_capabilities(self, capabilities, browser=None): - if isinstance(capabilities, dict): - return capabilities - desired_capabilities = {} if is_falsy(capabilities): - return desired_capabilities - for part in capabilities.split(','): - key, value = part.split(':') - desired_capabilities[key.strip()] = value.strip() + return {} + if not isinstance(capabilities, dict): + capabilities = self._string_to_dict(capabilities) browser_alias = {'googlechrome': "chrome", 'gc': "chrome", 'headlesschrome': 'chrome', 'ff': 'firefox', 'headlessfirefox': 'firefox', 'internetexplorer': 'ie'} browser = browser_alias.get(browser, browser) if browser in ['ie', 'firefox', 'edge']: - return {'capabilities': desired_capabilities} - return {'desired_capabilities': desired_capabilities} + return {'capabilities': capabilities} + return {'desired_capabilities': capabilities} + + def _string_to_dict(self, capabilities): + desired_capabilities = {} + for part in capabilities.split(','): + key, value = part.split(':') + desired_capabilities[key.strip()] = value.strip() + return desired_capabilities def create_chrome(self, desired_capabilities, remote_url, options=None): if is_truthy(remote_url): diff --git a/utest/test/keywords/test_webdrivercreator.py b/utest/test/keywords/test_webdrivercreator.py index e24f1b15c..e4cbcd6f5 100644 --- a/utest/test/keywords/test_webdrivercreator.py +++ b/utest/test/keywords/test_webdrivercreator.py @@ -48,8 +48,9 @@ def test_parse_capabilities(self): caps = self.creator._parse_capabilities('key1:value1,key2:value2', 'edge') self.assertDictEqual(caps, expected) - caps = self.creator._parse_capabilities(expected) - self.assertDictEqual(caps, expected) + parsing_caps = expected.copy() + caps = self.creator._parse_capabilities(parsing_caps) + self.assertDictEqual(caps, {'desired_capabilities': expected}) caps = self.creator._parse_capabilities('key1 : value1 , key2: value2') expected = {'desired_capabilities': {'key1': 'value1', 'key2': 'value2'}} @@ -65,6 +66,17 @@ def test_parse_capabilities(self): caps = self.creator._parse_capabilities({}) self.assertDictEqual(caps, {}) + caps = self.creator._parse_capabilities(None) + self.assertDictEqual(caps, {}) + + caps = self.creator._parse_capabilities({'key1': 'value1', 'key2': 'value2'}) + expected = {'desired_capabilities': {'key1': 'value1', 'key2': 'value2'}} + self.assertDictEqual(caps, expected) + + caps = self.creator._parse_capabilities({'key1': 'value1', 'key2': 'value2'}, 'ie') + expected = {'capabilities': {'key1': 'value1', 'key2': 'value2'}} + self.assertDictEqual(caps, expected) + def test_chrome(self): expected_webdriver = mock() when(webdriver).Chrome(options=None).thenReturn(expected_webdriver) From c8a406113351586d8ad4ff6cbab50d657c5a5c32 Mon Sep 17 00:00:00 2001 From: Tatu Aalto Date: Thu, 3 Jan 2019 00:16:37 +0200 Subject: [PATCH 2/2] Better unit tests --- utest/test/keywords/test_webdrivercreator.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/utest/test/keywords/test_webdrivercreator.py b/utest/test/keywords/test_webdrivercreator.py index e4cbcd6f5..0202c47b0 100644 --- a/utest/test/keywords/test_webdrivercreator.py +++ b/utest/test/keywords/test_webdrivercreator.py @@ -69,13 +69,15 @@ def test_parse_capabilities(self): caps = self.creator._parse_capabilities(None) self.assertDictEqual(caps, {}) - caps = self.creator._parse_capabilities({'key1': 'value1', 'key2': 'value2'}) - expected = {'desired_capabilities': {'key1': 'value1', 'key2': 'value2'}} - self.assertDictEqual(caps, expected) - - caps = self.creator._parse_capabilities({'key1': 'value1', 'key2': 'value2'}, 'ie') - expected = {'capabilities': {'key1': 'value1', 'key2': 'value2'}} - self.assertDictEqual(caps, expected) + for browser in [None, 'safari', 'headlesschrome', 'foobar']: + caps = self.creator._parse_capabilities({'key1': 'value1', 'key2': 'value2'}, browser) + expected = {'desired_capabilities': {'key1': 'value1', 'key2': 'value2'}} + self.assertDictEqual(caps, expected) + + for browser in ['ie', 'firefox', 'edge']: + caps = self.creator._parse_capabilities({'key1': 'value1', 'key2': 'value2'}, browser) + expected = {'capabilities': {'key1': 'value1', 'key2': 'value2'}} + self.assertDictEqual(caps, expected) def test_chrome(self): expected_webdriver = mock()