Skip to content

Commit dba58a4

Browse files
committed
Capture browser logs
1 parent 9f7107f commit dba58a4

File tree

2 files changed

+43
-2
lines changed

2 files changed

+43
-2
lines changed

src/org/labkey/test/TestProperties.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,11 @@ public static boolean isDebugLoggingEnabled()
192192
return "true".equals(System.getProperty("webtest.logging.debug"));
193193
}
194194

195+
public static boolean isConsoleLogEnabled()
196+
{
197+
return "true".equals(System.getProperty("webtest.devtools.console.log"));
198+
}
199+
195200
public static boolean isPrimaryUserAppAdmin()
196201
{
197202
return "true".equals(System.getProperty("webtest.primary.app.admin"));

src/org/labkey/test/WebDriverWrapper.java

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import org.apache.commons.lang3.mutable.MutableInt;
2424
import org.apache.commons.lang3.tuple.ImmutablePair;
2525
import org.apache.commons.lang3.tuple.Pair;
26+
import org.apache.logging.log4j.Level;
27+
import org.apache.logging.log4j.LogManager;
2628
import org.jetbrains.annotations.Contract;
2729
import org.jetbrains.annotations.NotNull;
2830
import org.jetbrains.annotations.Nullable;
@@ -80,6 +82,11 @@
8082
import org.openqa.selenium.chrome.ChromeDriver;
8183
import org.openqa.selenium.chrome.ChromeDriverService;
8284
import org.openqa.selenium.chrome.ChromeOptions;
85+
import org.openqa.selenium.devtools.DevTools;
86+
import org.openqa.selenium.devtools.HasDevTools;
87+
import org.openqa.selenium.devtools.v85.log.Log;
88+
import org.openqa.selenium.devtools.v85.log.model.LogEntry;
89+
import org.openqa.selenium.devtools.v85.runtime.model.ConsoleAPICalled;
8390
import org.openqa.selenium.firefox.FirefoxBinary;
8491
import org.openqa.selenium.firefox.FirefoxDriver;
8592
import org.openqa.selenium.firefox.FirefoxDriverLogLevel;
@@ -89,6 +96,7 @@
8996
import org.openqa.selenium.firefox.GeckoDriverService;
9097
import org.openqa.selenium.ie.InternetExplorerDriver;
9198
import org.openqa.selenium.interactions.Actions;
99+
import org.openqa.selenium.remote.Augmenter;
92100
import org.openqa.selenium.remote.RemoteWebDriver;
93101
import org.openqa.selenium.remote.service.DriverService;
94102
import org.openqa.selenium.support.ui.ExpectedConditions;
@@ -131,11 +139,11 @@
131139
import java.util.concurrent.Future;
132140
import java.util.concurrent.TimeUnit;
133141
import java.util.function.Supplier;
134-
import java.util.logging.Level;
135142
import java.util.logging.Logger;
136143
import java.util.regex.Matcher;
137144
import java.util.regex.Pattern;
138145
import java.util.stream.Collectors;
146+
import org.openqa.selenium.devtools.v85.runtime.Runtime;
139147

140148
import static org.apache.commons.lang3.StringUtils.trimToNull;
141149
import static org.junit.Assert.assertEquals;
@@ -171,7 +179,7 @@ public abstract class WebDriverWrapper implements WrapsDriver
171179
{
172180
// Eliminate noise from org.openqa.selenium.remote.ProtocolHandshake and org.openqa.selenium.interactions.Actions
173181
if (!isWebDriverLoggingEnabled())
174-
Logger.getLogger("org.openqa.selenium").setLevel(Level.WARNING);
182+
Logger.getLogger("org.openqa.selenium").setLevel(java.util.logging.Level.WARNING);
175183
}
176184

177185
public WebDriverWrapper()
@@ -393,6 +401,12 @@ protected Pair<WebDriver, DriverService> createNewWebDriver(@NotNull Pair<WebDri
393401

394402
if (newWebDriver != null)
395403
{
404+
newWebDriver = new Augmenter().augment(newWebDriver);
405+
DevTools devTools = ((HasDevTools) newWebDriver).getDevTools();
406+
devTools.createSession();
407+
devTools.send(Log.enable());
408+
devTools.addListener(Log.entryAdded(), BrowserConsoleLog::log);
409+
396410
Capabilities caps = ((HasCapabilities) newWebDriver).getCapabilities();
397411
String browserName = caps.getBrowserName();
398412
String browserVersion = caps.getBrowserVersion();
@@ -444,6 +458,11 @@ private void configureGeckoDriverLogging(File downloadDir)
444458
System.setProperty(FirefoxDriver.SystemProperty.BROWSER_LOGFILE, "/dev/null");
445459
}
446460

461+
protected void enableConsoleLogCapture(boolean enable)
462+
{
463+
464+
}
465+
447466
public boolean isFirefox()
448467
{
449468
return getDriver().getClass().isAssignableFrom(FirefoxDriver.class);
@@ -3922,3 +3941,20 @@ public void waitForElements(final Locator loc, final int count, int wait)
39223941
assertEquals("Element not present expected number of times", count, loc.findElements(getDriver()).size());
39233942
}
39243943
}
3944+
3945+
class BrowserConsoleLog
3946+
{
3947+
private static final Map<LogEntry.Level, Level> LOG_ENTRY_LEVELS = Map.of(
3948+
LogEntry.Level.VERBOSE, Level.DEBUG,
3949+
LogEntry.Level.INFO, Level.INFO,
3950+
LogEntry.Level.WARNING, Level.WARN,
3951+
LogEntry.Level.ERROR, Level.ERROR
3952+
);
3953+
3954+
static final org.apache.logging.log4j.Logger LOGGER = LogManager.getLogger(BrowserConsoleLog.class);
3955+
3956+
static void log(LogEntry logEntry)
3957+
{
3958+
LOGGER.log(LOG_ENTRY_LEVELS.get(logEntry.getLevel()), logEntry.getText());
3959+
}
3960+
}

0 commit comments

Comments
 (0)