From 7cb6ab9afaf3c4bee32a08b51b1a67d68244cbe0 Mon Sep 17 00:00:00 2001 From: Hi-Fi Date: Sat, 2 Jun 2018 11:09:37 +0300 Subject: [PATCH] Fixed Chrome options parsing to really use given values Fixes #43 --- .../keywords/BrowserManagement.java | 26 ++++++++++--------- .../keywords/BrowserManagementTest.java | 16 ++++++++++-- 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/github/markusbernhardt/seleniumlibrary/keywords/BrowserManagement.java b/src/main/java/com/github/markusbernhardt/seleniumlibrary/keywords/BrowserManagement.java index b9552bb..c3c7592 100644 --- a/src/main/java/com/github/markusbernhardt/seleniumlibrary/keywords/BrowserManagement.java +++ b/src/main/java/com/github/markusbernhardt/seleniumlibrary/keywords/BrowserManagement.java @@ -9,6 +9,7 @@ import java.net.MalformedURLException; import java.net.URL; import java.net.UnknownHostException; +import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -780,19 +781,20 @@ protected void parseBrowserOptionsChrome(String browserOptions, Capabilities des if (browserOptions != null && !"NONE".equalsIgnoreCase(browserOptions)) { JSONObject jsonObject = (JSONObject) JSONValue.parse(browserOptions); if (jsonObject != null) { - Map chromeOptions = new HashMap(); - Iterator iterator = jsonObject.entrySet().iterator(); - while (iterator.hasNext()) { - Entry entry = (Entry) iterator.next(); - String key = entry.getKey().toString(); - logging.debug(String.format("Adding property: %s with value: %s (type: %s)", - key.toString(), entry.getValue(), entry.getValue().getClass())); - chromeOptions.put(key, entry.getValue()); + List args = new ArrayList<>(); + for (Object arg : (JSONArray)jsonObject.get("args")) { + args.add("--"+arg.toString().replace("--", "")); + } + ((ChromeOptions) desiredCapabilities).addArguments(args); + List extensions = new ArrayList<>(); + for (Object extension : (JSONArray)jsonObject.get("extensions")) { + extensions.add(new File(extension.toString().toString().replace('/', File.separatorChar))); } - ((ChromeOptions) desiredCapabilities).setCapability(ChromeOptions.CAPABILITY, chromeOptions); - if (browserOptions.contains("disable-extensions")) { - ((ChromeOptions) desiredCapabilities).setExperimentalOption("useAutomationExtension", false); - } + ((ChromeOptions) desiredCapabilities).addExtensions(extensions); + ((ChromeOptions) desiredCapabilities).setExperimentalOption("prefs", jsonObject.get("prefs")); + if (browserOptions.contains("disable-extensions")) { + ((ChromeOptions) desiredCapabilities).setExperimentalOption("useAutomationExtension", false); + } } else { logging.warn("Invalid browserOptions: " + browserOptions); } diff --git a/src/test/java/com/github/markusbernhardt/seleniumlibrary/keywords/BrowserManagementTest.java b/src/test/java/com/github/markusbernhardt/seleniumlibrary/keywords/BrowserManagementTest.java index c150413..b9f7e2a 100644 --- a/src/test/java/com/github/markusbernhardt/seleniumlibrary/keywords/BrowserManagementTest.java +++ b/src/test/java/com/github/markusbernhardt/seleniumlibrary/keywords/BrowserManagementTest.java @@ -71,8 +71,20 @@ public void testCreateDesiredCapabilitiesForHtmlUnit() { @Test public void parseChromeBrowserOptions() { ChromeOptions chromeOptions = new ChromeOptions(); - String browserOptions = "{\"args\":[\"start-maximized\"],\"extensions\":[],\"prefs\":{\"intl.accept_languages\":\"de-AT\"}}"; + String browserOptions = "{\"args\":[\"start-maximized\"],\"extensions\":[],\"prefs\":{\"intl.accept_languages\":\"de-AT\", \"intl.charset_default\":\"UTF-8\"}}"; bm.parseBrowserOptionsChrome(browserOptions, chromeOptions); - assertTrue(chromeOptions.getCapability("goog:chromeOptions").toString().contains("de-AT")); + assertTrue(chromeOptions.asMap().toString().contains("--start-maximized")); + assertTrue(chromeOptions.asMap().toString().contains("UTF-8")); + } + + @Test + public void parseChromeCapabilities() { + ChromeOptions chromeOptions = new ChromeOptions(); + String browserName = "googlechromeheadless"; + String browserOptions = "{\"args\":[\"start-maximized\"],\"extensions\":[],\"prefs\":{\"intl.accept_languages\":\"de-AT\"}}"; + String desiredCapabilitiesString = "{}"; + Capabilities cap = bm.createCapabilities(browserName, desiredCapabilitiesString, browserOptions); + assertTrue(cap.asMap().toString().contains("--start-maximized")); + assertTrue(cap.asMap().toString().contains("--headless")); } }