Skip to content

Commit 21d115e

Browse files
authored
[java] Allow arguments to be passed in Node flag "driver-configuration" (#11367)
Fixes #11341
1 parent 77f0cfa commit 21d115e

File tree

2 files changed

+43
-1
lines changed

2 files changed

+43
-1
lines changed

java/src/org/openqa/selenium/grid/node/config/NodeOptions.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,10 @@ private void addDriverConfigs(
351351
int toIndex = (i + 1) >= configIndexes.length ? drivers.size() : configIndexes[i + 1];
352352
Map<String, String> configMap = new HashMap<>();
353353
drivers.subList(fromIndex, toIndex)
354-
.forEach(keyValue -> configMap.put(keyValue.split("=")[0], keyValue.split("=")[1]));
354+
.forEach(keyValue -> {
355+
String [] values = keyValue.split("=", 2);
356+
configMap.put(values[0], values[1]);
357+
});
355358
driversMap.add(configMap);
356359
}
357360

java/test/org/openqa/selenium/grid/node/config/NodeOptionsTest.java

+39
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@
5454
import static java.util.Collections.emptySet;
5555
import static java.util.Collections.singletonMap;
5656
import static org.assertj.core.api.Assertions.assertThat;
57+
import static org.assertj.core.api.InstanceOfAssertFactories.LIST;
58+
import static org.assertj.core.api.InstanceOfAssertFactories.MAP;
5759
import static org.junit.jupiter.api.Assertions.fail;
5860
import static org.junit.jupiter.api.Assumptions.assumeFalse;
5961
import static org.junit.jupiter.api.Assumptions.assumeTrue;
@@ -366,6 +368,43 @@ void driversCanBeConfiguredWithASpecificWebDriverBinary() {
366368
geckoDriverLocation.equals(capabilities.getCapability("se:webDriverExecutable")));
367369
}
368370

371+
@Test
372+
void driversCanBeConfiguredWithASpecificArguments() {
373+
String chLocation = "/Applications/Google Chrome Beta.app/Contents/MacOS/Google Chrome Beta";
374+
String chromeDriverLocation = "/path/to/chromedriver_beta/chromedriver";
375+
ChromeOptions chromeOptions = new ChromeOptions();
376+
chromeOptions.setBinary(chLocation);
377+
chromeOptions.addArguments("--homepage=https://www.selenium.dev");
378+
379+
StringBuilder chromeCaps = new StringBuilder();
380+
new Json().newOutput(chromeCaps).setPrettyPrint(false).write(chromeOptions);
381+
382+
String[] rawConfig = new String[]{
383+
"[node]",
384+
"detect-drivers = false",
385+
"[[node.driver-configuration]]",
386+
"display-name = \"Chrome Beta\"",
387+
String.format("webdriver-executable = '%s'", chromeDriverLocation),
388+
String.format("stereotype = \"%s\"", chromeCaps.toString().replace("\"", "\\\""))
389+
};
390+
Config config = new TomlConfig(new StringReader(String.join("\n", rawConfig)));
391+
392+
List<Capabilities> reported = new ArrayList<>();
393+
new NodeOptions(config).getSessionFactories(capabilities -> {
394+
reported.add(capabilities);
395+
return Collections.singleton(HelperFactory.create(config, capabilities));
396+
});
397+
398+
assertThat(reported).is(supporting("chrome"));
399+
assertThat(reported)
400+
.filteredOn(capabilities -> capabilities.asMap().containsKey(ChromeOptions.CAPABILITY));
401+
402+
assertThat(reported.get(0).asMap()).asInstanceOf(MAP)
403+
.extractingByKey(ChromeOptions.CAPABILITY).asInstanceOf(MAP)
404+
.extractingByKey("args").asInstanceOf(LIST)
405+
.containsExactly("--homepage=https://www.selenium.dev");
406+
}
407+
369408
@Test
370409
void driversConfigNeedsStereotypeField() {
371410
String[] rawConfig = new String[]{

0 commit comments

Comments
 (0)