Skip to content

Commit 6cbfbf6

Browse files
committed
[java] fix chromedriver log level logic
1 parent 7627ee8 commit 6cbfbf6

2 files changed

Lines changed: 55 additions & 10 deletions

File tree

java/src/org/openqa/selenium/chrome/ChromeDriverService.java

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,10 @@ public Builder withAppendLog(boolean appendLog) {
190190
*/
191191
@SuppressWarnings("UnusedReturnValue")
192192
public Builder withVerbose(boolean verbose) {
193-
this.verbose = verbose;
193+
if (verbose) {
194+
this.logLevel = ChromeDriverLogLevel.ALL;
195+
}
196+
this.verbose = false;
194197
return this;
195198
}
196199

@@ -201,6 +204,8 @@ public Builder withVerbose(boolean verbose) {
201204
* @return A self reference.
202205
*/
203206
public Builder withLogLevel(ChromeDriverLogLevel logLevel) {
207+
this.verbose = false;
208+
this.silent = false;
204209
this.logLevel = logLevel;
205210
return this;
206211
}
@@ -212,7 +217,10 @@ public Builder withLogLevel(ChromeDriverLogLevel logLevel) {
212217
* @return A self reference.
213218
*/
214219
public Builder withSilent(boolean silent) {
215-
this.silent = silent;
220+
if (silent) {
221+
this.logLevel = ChromeDriverLogLevel.OFF;
222+
}
223+
this.silent = false;
216224
return this;
217225
}
218226

@@ -245,12 +253,12 @@ protected List<String> createArgs() {
245253
}
246254
}
247255

248-
if (logLevel != null) {
249-
withLogLevel(logLevel);
250-
withVerbose(false);
251-
}
256+
// If set in properties and not overwritten by method
252257
if (verbose) {
253-
withLogLevel(ChromeDriverLogLevel.ALL);
258+
withVerbose(true);
259+
}
260+
if (silent) {
261+
withSilent(true);
254262
}
255263

256264
List<String> args = new ArrayList<>();
@@ -265,9 +273,6 @@ protected List<String> createArgs() {
265273
if (logLevel != null) {
266274
args.add(String.format("--log-level=%s", logLevel.toString().toUpperCase()));
267275
}
268-
if (silent) {
269-
args.add("--silent");
270-
}
271276
if (whitelistedIps != null) {
272277
args.add(String.format("--whitelisted-ips=%s", whitelistedIps));
273278
}

java/test/org/openqa/selenium/chrome/ChromeDriverServiceTest.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929

3030
import java.io.File;
3131
import java.time.Duration;
32+
import java.util.Arrays;
33+
import java.util.List;
3234

3335
@Tag("UnitTests")
3436
class ChromeDriverServiceTest {
@@ -49,4 +51,42 @@ void builderPassesTimeoutToDriverService() {
4951
builderMock.build();
5052
verify(builderMock).createDriverService(any(), anyInt(), eq(customTimeout), any(), any());
5153
}
54+
55+
// Alternate behavior is throwing an error, but have to at least be consistent
56+
@Test
57+
void logLevelLastWins() {
58+
File exe = new File("someFile");
59+
60+
ChromeDriverService.Builder builderMock = spy(ChromeDriverService.Builder.class);
61+
doReturn(exe).when(builderMock).findDefaultExecutable();
62+
63+
List<String> silentLast = Arrays.asList("--port=1", "--log-level=OFF");
64+
builderMock.withLogLevel(ChromeDriverLogLevel.ALL).usingPort(1).withSilent(true).build();
65+
verify(builderMock).createDriverService(any(), anyInt(), any(), eq(silentLast), any());
66+
67+
List<String> silentFirst = Arrays.asList("--port=1", "--log-level=DEBUG");
68+
builderMock.withSilent(true).withLogLevel(ChromeDriverLogLevel.DEBUG).usingPort(1).build();
69+
verify(builderMock).createDriverService(any(), anyInt(), any(), eq(silentFirst), any());
70+
71+
List<String> verboseLast = Arrays.asList("--port=1", "--log-level=ALL");
72+
builderMock.withLogLevel(ChromeDriverLogLevel.OFF).usingPort(1).withVerbose(true).build();
73+
verify(builderMock).createDriverService(any(), anyInt(), any(), eq(verboseLast), any());
74+
75+
List<String> verboseFirst = Arrays.asList("--port=1", "--log-level=INFO");
76+
builderMock.withVerbose(true).withLogLevel(ChromeDriverLogLevel.INFO).usingPort(1).build();
77+
verify(builderMock).createDriverService(any(), anyInt(), any(), eq(verboseFirst), any());
78+
}
79+
80+
// Setting these to false makes no sense; we're just going to ignore it.
81+
@Test
82+
void ignoreFalseLogging() {
83+
File exe = new File("someFile");
84+
85+
ChromeDriverService.Builder builderMock = spy(ChromeDriverService.Builder.class);
86+
doReturn(exe).when(builderMock).findDefaultExecutable();
87+
88+
List<String> falseSilent = Arrays.asList("--port=1", "--log-level=DEBUG");
89+
builderMock.withLogLevel(ChromeDriverLogLevel.DEBUG).usingPort(1).withSilent(false).build();
90+
verify(builderMock).createDriverService(any(), anyInt(), any(), eq(falseSilent), any());
91+
}
5292
}

0 commit comments

Comments
 (0)