Skip to content

Commit

Permalink
Capture browser logs
Browse files Browse the repository at this point in the history
  • Loading branch information
labkey-tchad committed Jul 29, 2022
1 parent 9f7107f commit dba58a4
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 2 deletions.
5 changes: 5 additions & 0 deletions src/org/labkey/test/TestProperties.java
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,11 @@ public static boolean isDebugLoggingEnabled()
return "true".equals(System.getProperty("webtest.logging.debug"));
}

public static boolean isConsoleLogEnabled()
{
return "true".equals(System.getProperty("webtest.devtools.console.log"));
}

public static boolean isPrimaryUserAppAdmin()
{
return "true".equals(System.getProperty("webtest.primary.app.admin"));
Expand Down
40 changes: 38 additions & 2 deletions src/org/labkey/test/WebDriverWrapper.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@
import org.apache.commons.lang3.mutable.MutableInt;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
Expand Down Expand Up @@ -80,6 +82,11 @@
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeDriverService;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.devtools.DevTools;
import org.openqa.selenium.devtools.HasDevTools;
import org.openqa.selenium.devtools.v85.log.Log;
import org.openqa.selenium.devtools.v85.log.model.LogEntry;
import org.openqa.selenium.devtools.v85.runtime.model.ConsoleAPICalled;
import org.openqa.selenium.firefox.FirefoxBinary;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxDriverLogLevel;
Expand All @@ -89,6 +96,7 @@
import org.openqa.selenium.firefox.GeckoDriverService;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.remote.Augmenter;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.remote.service.DriverService;
import org.openqa.selenium.support.ui.ExpectedConditions;
Expand Down Expand Up @@ -131,11 +139,11 @@
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.function.Supplier;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import org.openqa.selenium.devtools.v85.runtime.Runtime;

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

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

if (newWebDriver != null)
{
newWebDriver = new Augmenter().augment(newWebDriver);
DevTools devTools = ((HasDevTools) newWebDriver).getDevTools();
devTools.createSession();
devTools.send(Log.enable());
devTools.addListener(Log.entryAdded(), BrowserConsoleLog::log);

Capabilities caps = ((HasCapabilities) newWebDriver).getCapabilities();
String browserName = caps.getBrowserName();
String browserVersion = caps.getBrowserVersion();
Expand Down Expand Up @@ -444,6 +458,11 @@ private void configureGeckoDriverLogging(File downloadDir)
System.setProperty(FirefoxDriver.SystemProperty.BROWSER_LOGFILE, "/dev/null");
}

protected void enableConsoleLogCapture(boolean enable)
{

}

public boolean isFirefox()
{
return getDriver().getClass().isAssignableFrom(FirefoxDriver.class);
Expand Down Expand Up @@ -3922,3 +3941,20 @@ public void waitForElements(final Locator loc, final int count, int wait)
assertEquals("Element not present expected number of times", count, loc.findElements(getDriver()).size());
}
}

class BrowserConsoleLog
{
private static final Map<LogEntry.Level, Level> LOG_ENTRY_LEVELS = Map.of(
LogEntry.Level.VERBOSE, Level.DEBUG,
LogEntry.Level.INFO, Level.INFO,
LogEntry.Level.WARNING, Level.WARN,
LogEntry.Level.ERROR, Level.ERROR
);

static final org.apache.logging.log4j.Logger LOGGER = LogManager.getLogger(BrowserConsoleLog.class);

static void log(LogEntry logEntry)
{
LOGGER.log(LOG_ENTRY_LEVELS.get(logEntry.getLevel()), logEntry.getText());
}
}

0 comments on commit dba58a4

Please sign in to comment.