Skip to content

Commit ec61816

Browse files
committed
Include browserBinary method in WebDriverManager API
1 parent 86ff854 commit ec61816

File tree

13 files changed

+231
-10
lines changed

13 files changed

+231
-10
lines changed

src/main/java/io/github/bonigarcia/wdm/WebDriverManager.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,10 @@ protected abstract List<URL> getDriverUrls(String driverVersion)
183183

184184
protected abstract void setBrowserVersion(String browserVersion);
185185

186+
protected abstract String getBrowserBinary();
187+
188+
protected abstract void setBrowserBinary(String browserBinary);
189+
186190
protected abstract void setDriverUrl(URL url);
187191

188192
protected abstract URL getDriverUrl();
@@ -629,6 +633,11 @@ public WebDriverManager browserVersion(String browserVersion) {
629633
return this;
630634
}
631635

636+
public WebDriverManager browserBinary(String browserBinary) {
637+
setBrowserBinary(browserBinary);
638+
return this;
639+
}
640+
632641
public WebDriverManager architecture(Architecture architecture) {
633642
config().setArchitecture(architecture);
634643
return this;
@@ -1327,7 +1336,8 @@ && getDriverName().contains(removeExtension(f.getName()))) {
13271336

13281337
protected Optional<String> getBrowserVersionFromTheShell() {
13291338
return getVersionDetector().getBrowserVersionFromTheShell(
1330-
getDriverManagerType().getBrowserNameLowerCase());
1339+
getDriverManagerType().getBrowserNameLowerCase(),
1340+
getBrowserBinary());
13311341
}
13321342

13331343
protected Optional<String> detectBrowserVersion() {

src/main/java/io/github/bonigarcia/wdm/config/Config.java

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,8 @@ public class Config {
131131
"wdm.chromeGoodVersionsUrl", String.class);
132132
ConfigKey<String> chromeLastGoodVersionsUrl = new ConfigKey<>(
133133
"wdm.chromeLastGoodVersionsUrl", String.class);
134+
ConfigKey<String> chromeBinary = new ConfigKey<>("wdm.chromeBinary",
135+
String.class);
134136

135137
ConfigKey<String> edgeDriverVersion = new ConfigKey<>(
136138
"wdm.edgeDriverVersion", String.class);
@@ -142,6 +144,8 @@ public class Config {
142144
URL.class);
143145
ConfigKey<String> edgeDownloadUrlPattern = new ConfigKey<>(
144146
"wdm.edgeDownloadUrlPattern", String.class);
147+
ConfigKey<String> edgeBinary = new ConfigKey<>("wdm.edgeBinary",
148+
String.class);
145149

146150
ConfigKey<String> geckoDriverVersion = new ConfigKey<>(
147151
"wdm.geckoDriverVersion", String.class);
@@ -159,6 +163,8 @@ public class Config {
159163
"wdm.geckoDriverSnapPath", String.class);
160164
ConfigKey<Boolean> useGeckoDriverSnap = new ConfigKey<>(
161165
"wdm.useGeckoDriverSnap", Boolean.class);
166+
ConfigKey<String> firefoxBinary = new ConfigKey<>("wdm.firefoxBinary",
167+
String.class);
162168

163169
ConfigKey<String> iExplorerDriverVersion = new ConfigKey<>(
164170
"wdm.iExplorerDriverVersion", String.class);
@@ -177,6 +183,8 @@ public class Config {
177183
URL.class);
178184
ConfigKey<URL> operaDriverMirrorUrl = new ConfigKey<>(
179185
"wdm.operaDriverMirrorUrl", URL.class);
186+
ConfigKey<String> operaBinary = new ConfigKey<>("wdm.operaBinary",
187+
String.class);
180188

181189
ConfigKey<String> chromiumDriverVersion = new ConfigKey<>(
182190
"wdm.chromiumDriverVersion", String.class);
@@ -186,6 +194,8 @@ public class Config {
186194
"wdm.chromiumDriverSnapPath", String.class);
187195
ConfigKey<Boolean> useChromiumDriverSnap = new ConfigKey<>(
188196
"wdm.useChromiumDriverSnap", Boolean.class);
197+
ConfigKey<String> chromiumBinary = new ConfigKey<>("wdm.chromiumBinary",
198+
String.class);
189199

190200
ConfigKey<String> safariVersion = new ConfigKey<>("wdm.safariVersion",
191201
String.class);
@@ -796,6 +806,15 @@ public Config setChromeLastGoodVersionsUrl(String value) {
796806
return this;
797807
}
798808

809+
public String getChromeBinary() {
810+
return resolve(chromeBinary);
811+
}
812+
813+
public Config setChromeBinary(String value) {
814+
this.chromeBinary.setValue(value);
815+
return this;
816+
}
817+
799818
public String getEdgeDriverVersion() {
800819
return resolve(edgeDriverVersion);
801820
}
@@ -841,6 +860,15 @@ public Config setEdgeDownloadUrlPattern(String value) {
841860
return this;
842861
}
843862

863+
public String getEdgeBinary() {
864+
return resolve(edgeBinary);
865+
}
866+
867+
public Config setEdgeBinary(String value) {
868+
this.edgeBinary.setValue(value);
869+
return this;
870+
}
871+
844872
public String getGeckoDriverVersion() {
845873
return resolve(geckoDriverVersion);
846874
}
@@ -913,6 +941,15 @@ public Config setUseGeckoDriverSnap(boolean value) {
913941
return this;
914942
}
915943

944+
public String getFirefoxBinary() {
945+
return resolve(firefoxBinary);
946+
}
947+
948+
public Config setFirefoxBinary(String value) {
949+
this.firefoxBinary.setValue(value);
950+
return this;
951+
}
952+
916953
public String getIExplorerDriverVersion() {
917954
return resolve(iExplorerDriverVersion);
918955
}
@@ -985,6 +1022,15 @@ public Config setOperaDriverMirrorUrl(URL value) {
9851022
return this;
9861023
}
9871024

1025+
public String getOperaBinary() {
1026+
return resolve(operaBinary);
1027+
}
1028+
1029+
public Config setOperaBinary(String value) {
1030+
this.operaBinary.setValue(value);
1031+
return this;
1032+
}
1033+
9881034
public String getChromiumDriverVersion() {
9891035
return resolve(chromiumDriverVersion);
9901036
}
@@ -994,6 +1040,15 @@ public Config setChromiumDriverVersion(String value) {
9941040
return this;
9951041
}
9961042

1043+
public String getChromiumBinary() {
1044+
return resolve(chromiumBinary);
1045+
}
1046+
1047+
public Config setChromiumBinary(String value) {
1048+
this.chromiumBinary.setValue(value);
1049+
return this;
1050+
}
1051+
9971052
public String getSafariVersion() {
9981053
return resolve(safariVersion);
9991054
}

src/main/java/io/github/bonigarcia/wdm/managers/ChromeDriverManager.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,16 @@ protected void setBrowserVersion(String browserVersion) {
8888
config().setChromeVersion(browserVersion);
8989
}
9090

91+
@Override
92+
protected String getBrowserBinary() {
93+
return config().getChromeBinary();
94+
}
95+
96+
@Override
97+
protected void setBrowserBinary(String browserBinary) {
98+
config().setChromeBinary(browserBinary);
99+
}
100+
91101
@Override
92102
protected URL getDriverUrl() {
93103
return getDriverUrlCkeckingMirror(config().getChromeDriverUrl());

src/main/java/io/github/bonigarcia/wdm/managers/EdgeDriverManager.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,16 @@ protected void setBrowserVersion(String browserVersion) {
103103
config().setEdgeVersion(browserVersion);
104104
}
105105

106+
@Override
107+
protected String getBrowserBinary() {
108+
return config().getEdgeBinary();
109+
}
110+
111+
@Override
112+
protected void setBrowserBinary(String browserBinary) {
113+
config().setEdgeBinary(browserBinary);
114+
}
115+
106116
@Override
107117
protected URL getDriverUrl() {
108118
return config().getEdgeDriverUrl();

src/main/java/io/github/bonigarcia/wdm/managers/FirefoxDriverManager.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,16 @@ protected void setBrowserVersion(String browserVersion) {
7474
config().setFirefoxVersion(browserVersion);
7575
}
7676

77+
@Override
78+
protected String getBrowserBinary() {
79+
return config().getFirefoxBinary();
80+
}
81+
82+
@Override
83+
protected void setBrowserBinary(String browserBinary) {
84+
config().setFirefoxBinary(browserBinary);
85+
}
86+
7787
@Override
7888
protected URL getDriverUrl() {
7989
return getDriverUrlCkeckingMirror(config().getFirefoxDriverUrl());

src/main/java/io/github/bonigarcia/wdm/managers/InternetExplorerDriverManager.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,16 @@ protected void setBrowserVersion(String browserVersion) {
7474
// Nothing required
7575
}
7676

77+
@Override
78+
protected String getBrowserBinary() {
79+
return "";
80+
}
81+
82+
@Override
83+
protected void setBrowserBinary(String browserBinary) {
84+
// Nothing required
85+
}
86+
7787
@Override
7888
protected URL getDriverUrl() {
7989
return config().getIExplorerDriverUrl();

src/main/java/io/github/bonigarcia/wdm/managers/OperaDriverManager.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,16 @@ protected void setBrowserVersion(String browserVersion) {
8383
config().setOperaVersion(browserVersion);
8484
}
8585

86+
@Override
87+
protected String getBrowserBinary() {
88+
return config().getOperaBinary();
89+
}
90+
91+
@Override
92+
protected void setBrowserBinary(String browserBinary) {
93+
config().setOperaBinary(browserBinary);
94+
}
95+
8696
@Override
8797
protected URL getDriverUrl() {
8898
return getDriverUrlCkeckingMirror(config().getOperaDriverUrl());

src/main/java/io/github/bonigarcia/wdm/managers/VoidDriverManager.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,16 @@ protected void setDriverUrl(URL url) {
8585
// Nothing required
8686
}
8787

88+
@Override
89+
protected String getBrowserBinary() {
90+
return "";
91+
}
92+
93+
@Override
94+
protected void setBrowserBinary(String browserBinary) {
95+
// Nothing required
96+
}
97+
8898
@Override
8999
protected Optional<String> getDriverVersionFromRepository(
90100
Optional<String> driverVersion) {

src/main/java/io/github/bonigarcia/wdm/versions/VersionDetector.java

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import static io.github.bonigarcia.wdm.WebDriverManager.loadXML;
2020
import static io.github.bonigarcia.wdm.config.Config.EXE;
2121
import static io.github.bonigarcia.wdm.config.Config.isNullOrEmpty;
22+
import static io.github.bonigarcia.wdm.config.OperatingSystem.WIN;
2223
import static io.github.bonigarcia.wdm.versions.Shell.runAndWait;
2324
import static java.lang.invoke.MethodHandles.lookup;
2425
import static java.nio.charset.StandardCharsets.UTF_8;
@@ -243,7 +244,8 @@ public Optional<Path> getBrowserPath(String browserName) {
243244
return empty();
244245
}
245246

246-
public Optional<String> getBrowserVersionFromTheShell(String browserName) {
247+
public Optional<String> getBrowserVersionFromTheShell(String browserName,
248+
String browserBinary) {
247249
Optional<String> browserVersionUsingProperties = empty();
248250
String browserVersionDetectionCommand = config
249251
.getBrowserVersionDetectionCommand();
@@ -264,7 +266,7 @@ public Optional<String> getBrowserVersionFromTheShell(String browserName) {
264266
onlineMessage, propertiesName);
265267

266268
browserVersionUsingProperties = getBrowserVersionUsingProperties(
267-
browserName, commandsProperties);
269+
browserName, browserBinary, commandsProperties);
268270

269271
if (!browserVersionUsingProperties.isPresent()) {
270272
String notOnlineMessage = online ? LOCAL : ONLINE;
@@ -275,17 +277,33 @@ public Optional<String> getBrowserVersionFromTheShell(String browserName) {
275277

276278
commandsProperties = getProperties(propertiesName, !online);
277279
browserVersionUsingProperties = getBrowserVersionUsingProperties(
278-
browserName, commandsProperties);
280+
browserName, browserBinary, commandsProperties);
279281
}
280282

281283
return browserVersionUsingProperties;
282284
}
283285

284286
protected Optional<String> getBrowserVersionUsingProperties(
285-
String browserName, Properties commandsProperties) {
287+
String browserName, String browserBinary,
288+
Properties commandsProperties) {
286289
List<String> commandsPerOs = getCommandsList(browserName,
287290
commandsProperties);
288291

292+
if (!isNullOrEmpty(browserBinary)) {
293+
String commandKey = commandsPerOs.get(0);
294+
String command = commandsProperties.get(commandKey).toString();
295+
OperatingSystem operatingSystem = config.getOperatingSystem();
296+
if (operatingSystem == WIN) {
297+
command = command.replaceAll("\"[^\"]*\"",
298+
"\"" + browserBinary.replace("\\", "\\\\") + "\"");
299+
} else {
300+
command = browserBinary
301+
+ command.substring(command.lastIndexOf(" "));
302+
}
303+
304+
return getBrowserVersionUsingCommand(command);
305+
}
306+
289307
for (String commandKey : commandsPerOs) {
290308
String command = commandsProperties.get(commandKey).toString();
291309

src/test/java/io/github/bonigarcia/wdm/WebDriverManagerTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,16 @@ protected void setBrowserVersion(String browserVersion) {
107107

108108
}
109109

110+
@Override
111+
protected String getBrowserBinary() {
112+
return null;
113+
}
114+
115+
@Override
116+
protected void setBrowserBinary(String browserBinary) {
117+
118+
}
119+
110120
@Override
111121
protected void setDriverUrl(URL url) {
112122

0 commit comments

Comments
 (0)