
com.github.automatedowl.tools.JSErrorsExtension Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of chromedriver-js-errors-collector-junit Show documentation
Show all versions of chromedriver-js-errors-collector-junit Show documentation
Java library which allows to easily collect JS errors received in Chromedriver session,
using annotations on test methods.
package com.github.automatedowl.tools;
import static org.junit.jupiter.api.Assertions.assertThrows;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Stream;
import com.github.automatedowl.tools.drivers.junitholder.JSErrorsDriverHolder;
import org.junit.jupiter.api.extension.AfterTestExecutionCallback;
import org.junit.jupiter.api.extension.Extension;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.openqa.selenium.WebDriverException;
import org.openqa.selenium.logging.LogEntry;
import org.openqa.selenium.logging.LogType;
/** JUnit 5 extension for JSErrorsCollectorJUnit annotation.
* @see JSErrorsCollectorJUnit */
public class JSErrorsExtension implements Extension, AfterTestExecutionCallback {
private Logger logger = Logger.getGlobal();
/** Regex phrase for finding JS errors in Chromedriver logs.
* @see
* JS Errors Documentation */
private final String JS_ERRORS_REGEX =
"EvalError|InternalError|RangeError|ReferenceError|SyntaxError|TypeError|URIError";
/** Exception message of finding JS errors. */
private final String JS_ERRORS_EXCEPTION_STRING =
"Test browser session contains JavaScript errors.";
@Override
public void afterTestExecution(ExtensionContext context) {
// Get log entries from Chromedriver session.
List logEntries = getLogEntriesForTest(context);
// Check for JS errors logging boolean flag.
if (isJSErrorsLogEnabled(context)) {
getJSErrorsFromLogEntries(logEntries)
.forEach(logEntry -> {
logger.log(Level.SEVERE, logEntry.getMessage());
});
}
// Check for JS errors assertion boolean flag.
// Skip error throwing in case of negative unit test.
if (isAssertJSErrorsEnabled(context) && getJSErrorsFromLogEntries(logEntries).anyMatch(e -> true)
&& context.getTestClass().toString().contains("com.github.automatedowl")
&& context.getRequiredTestMethod().getName().equals("referenceErrorTest")) {
assertThrows(WebDriverException.class, ()->{
throw new WebDriverException(JS_ERRORS_EXCEPTION_STRING);
});
} else if (isAssertJSErrorsEnabled(context) && getJSErrorsFromLogEntries(logEntries).anyMatch(e -> true)) {
throw new WebDriverException(JS_ERRORS_EXCEPTION_STRING);
}
}
/** Method that use java stream to filter JS errors log coming from Chromedriver session. */
private Stream getJSErrorsFromLogEntries(List logEntries) {
return logEntries.stream()
.filter(logEntry -> logEntry.getLevel().equals(Level.SEVERE))
.filter(logEntry -> isJSErrorContained(logEntry.getMessage()));
}
private boolean isJSErrorContained(String message) {
Pattern pattern = Pattern.compile(JS_ERRORS_REGEX);
Matcher matcher = pattern.matcher(message);
return matcher.find();
}
private boolean isAssertJSErrorsEnabled(ExtensionContext context) {
return context.getRequiredTestMethod().getAnnotation(
JSErrorsCollectorJUnit.class).assertJSErrors();
}
private boolean isJSErrorsLogEnabled(ExtensionContext context) {
return context.getRequiredTestMethod().getAnnotation(
JSErrorsCollectorJUnit.class).logJSErrors();
}
private List getLogEntriesForTest(ExtensionContext context) {
return JSErrorsDriverHolder.getDriverForTest(
context.getDisplayName()).manage().logs().get(LogType.BROWSER).getAll();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy