Skip to content

Commit ec9c67b

Browse files
committed
[java] Improving merge of ChromiumOptions to take into account arguments, extentions and experimental options
1 parent c23e440 commit ec9c67b

File tree

5 files changed

+47
-8
lines changed

5 files changed

+47
-8
lines changed

java/client/src/org/openqa/selenium/chrome/ChromeOptions.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ public ChromeOptions setLogLevel(ChromeDriverLogLevel logLevel){
6565
@Override
6666
public ChromeOptions merge(Capabilities extraCapabilities) {
6767
ChromeOptions newInstance = new ChromeOptions();
68-
this.asMap().forEach(newInstance::setCapability);
69-
extraCapabilities.asMap().forEach(newInstance::setCapability);
68+
newInstance.mergeInPlace(this);
69+
newInstance.mergeInPlace(extraCapabilities);
7070
return newInstance;
7171
}
7272

java/client/src/org/openqa/selenium/chromium/ChromiumOptions.java

+18-4
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@
2121
import static java.util.Collections.unmodifiableMap;
2222
import static java.util.stream.Collectors.toList;
2323

24+
import org.openqa.selenium.Capabilities;
2425
import org.openqa.selenium.SessionNotCreatedException;
26+
import org.openqa.selenium.chrome.ChromeOptions;
2527
import org.openqa.selenium.internal.Require;
2628
import org.openqa.selenium.remote.AbstractDriverOptions;
2729

@@ -31,6 +33,7 @@
3133
import java.util.ArrayList;
3234
import java.util.Arrays;
3335
import java.util.Base64;
36+
import java.util.Collections;
3437
import java.util.HashMap;
3538
import java.util.List;
3639
import java.util.Map;
@@ -61,10 +64,10 @@
6164
public class ChromiumOptions<T extends ChromiumOptions> extends AbstractDriverOptions<ChromiumOptions> {
6265

6366
private String binary;
64-
private List<String> args = new ArrayList<>();
65-
private List<File> extensionFiles = new ArrayList<>();
66-
private List<String> extensions = new ArrayList<>();
67-
private Map<String, Object> experimentalOptions = new HashMap<>();
67+
private final List<String> args = new ArrayList<>();
68+
private final List<File> extensionFiles = new ArrayList<>();
69+
private final List<String> extensions = new ArrayList<>();
70+
private final Map<String, Object> experimentalOptions = new HashMap<>();
6871

6972
private final String CAPABILITY;
7073

@@ -232,4 +235,15 @@ public Map<String, Object> asMap() {
232235

233236
return unmodifiableMap(toReturn);
234237
}
238+
239+
protected void mergeInPlace(Capabilities capabilities) {
240+
capabilities.asMap().forEach(this::setCapability);
241+
if (capabilities instanceof ChromiumOptions) {
242+
ChromiumOptions<?> options = (ChromiumOptions<?>) capabilities;
243+
addArguments(options.args);
244+
addExtensions(options.extensionFiles);
245+
addEncodedExtensions(options.extensions);
246+
options.experimentalOptions.forEach(this::setExperimentalOption);
247+
}
248+
}
235249
}

java/client/src/org/openqa/selenium/edge/EdgeOptions.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ public EdgeOptions() {
6060
@Override
6161
public EdgeOptions merge(Capabilities extraCapabilities) {
6262
EdgeOptions newInstance = new EdgeOptions();
63-
this.asMap().forEach(newInstance::setCapability);
64-
extraCapabilities.asMap().forEach(newInstance::setCapability);
63+
newInstance.mergeInPlace(this);
64+
newInstance.mergeInPlace(extraCapabilities);
6565
return newInstance;
6666
}
6767
}

java/client/test/org/openqa/selenium/chrome/ChromeOptionsTest.java

+12
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919

2020
import static org.assertj.core.api.Assertions.assertThat;
2121
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
22+
import static org.assertj.core.api.InstanceOfAssertFactories.LIST;
23+
import static org.assertj.core.api.InstanceOfAssertFactories.MAP;
2224
import static org.openqa.selenium.chrome.ChromeDriverLogLevel.OFF;
2325
import static org.openqa.selenium.chrome.ChromeDriverLogLevel.SEVERE;
2426

@@ -56,5 +58,15 @@ public void canBuildLogLevelFromStringRepresentation() {
5658
assertThat(ChromeDriverLogLevel.fromString("SEVERE")).isEqualTo(SEVERE);
5759
}
5860

61+
@Test
62+
public void mergingOptionsMergesArguments() {
63+
ChromeOptions one = new ChromeOptions().addArguments("verbose");
64+
ChromeOptions two = new ChromeOptions().addArguments("silent");
65+
ChromeOptions merged = one.merge(two);
5966

67+
assertThat(merged.asMap()).asInstanceOf(MAP)
68+
.extractingByKey(ChromeOptions.CAPABILITY).asInstanceOf(MAP)
69+
.extractingByKey("args").asInstanceOf(LIST)
70+
.containsExactly("verbose", "silent");
71+
}
6072
}

java/client/test/org/openqa/selenium/edge/EdgeOptionsTest.java

+13
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
package org.openqa.selenium.edge;
1919

2020
import static org.assertj.core.api.Assertions.assertThat;
21+
import static org.assertj.core.api.InstanceOfAssertFactories.LIST;
2122
import static org.assertj.core.api.InstanceOfAssertFactories.MAP;
2223

2324
import com.google.common.io.Files;
@@ -26,6 +27,7 @@
2627
import org.junit.experimental.categories.Category;
2728
import org.openqa.selenium.ImmutableCapabilities;
2829
import org.openqa.selenium.PageLoadStrategy;
30+
import org.openqa.selenium.chrome.ChromeOptions;
2931
import org.openqa.selenium.remote.BrowserType;
3032
import org.openqa.selenium.remote.CapabilityType;
3133
import org.openqa.selenium.testing.UnitTests;
@@ -106,4 +108,15 @@ private File createTempFile(File tmpDir, String content) {
106108
}
107109
}
108110

111+
@Test
112+
public void mergingOptionsMergesArguments() {
113+
EdgeOptions one = new EdgeOptions().addArguments("verbose");
114+
EdgeOptions two = new EdgeOptions().addArguments("silent");
115+
EdgeOptions merged = one.merge(two);
116+
117+
assertThat(merged.asMap()).asInstanceOf(MAP)
118+
.extractingByKey(EdgeOptions.CAPABILITY).asInstanceOf(MAP)
119+
.extractingByKey("args").asInstanceOf(LIST)
120+
.containsExactly("verbose", "silent");
121+
}
109122
}

0 commit comments

Comments
 (0)