Skip to content

Commit bd2314c

Browse files
committed
Clean logic for report generation
1 parent 2beb910 commit bd2314c

File tree

3 files changed

+95
-139
lines changed

3 files changed

+95
-139
lines changed

src/main/java/io/github/bonigarcia/seljup/ScreenshotManager.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,17 +68,21 @@ boolean isScreenshotRequired() {
6868
|| (executionException.isPresent() && isSscreenshotWhenFailure);
6969
}
7070

71-
void makeScreenshotIfRequired(List<WebDriver> driverList, ExtentTest test) {
72-
driverList.forEach(driver -> makeScreenshotIfRequired(driver, test));
71+
void makeScreenshotIfRequired(List<WebDriver> driverList,
72+
Optional<ExtentTest> optionalTest) {
73+
driverList.forEach(
74+
driver -> makeScreenshotIfRequired(driver, optionalTest));
7375
}
7476

75-
void makeScreenshotIfRequired(WebDriver driver, ExtentTest test) {
77+
void makeScreenshotIfRequired(WebDriver driver,
78+
Optional<ExtentTest> optionalTest) {
7679
if (isScreenshotRequired() && driver != null) {
7780
String base64Screenshot = getBase64Screenshot(driver);
7881
String screenshotFormat = config.getScreenshotFormat();
7982
switch (screenshotFormat) {
8083
case PNG_KEY:
81-
test.addScreenCaptureFromBase64String(base64Screenshot);
84+
optionalTest.ifPresent(test -> test
85+
.addScreenCaptureFromBase64String(base64Screenshot));
8286
logFileScreenshot(driver);
8387
break;
8488
case BASE64_KEY:

src/main/java/io/github/bonigarcia/seljup/SeleniumJupiter.java

Lines changed: 87 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -43,19 +43,21 @@
4343
import java.time.format.DateTimeFormatter;
4444
import java.util.ArrayList;
4545
import java.util.Collections;
46+
import java.util.HashMap;
4647
import java.util.LinkedHashMap;
4748
import java.util.List;
4849
import java.util.Map;
4950
import java.util.Optional;
5051
import java.util.concurrent.ConcurrentHashMap;
52+
import java.util.stream.Collectors;
5153
import java.util.stream.Stream;
5254

5355
import org.apache.commons.io.IOUtils;
5456
import org.junit.jupiter.api.TestTemplate;
5557
import org.junit.jupiter.api.extension.AfterAllCallback;
5658
import org.junit.jupiter.api.extension.AfterEachCallback;
5759
import org.junit.jupiter.api.extension.AfterTestExecutionCallback;
58-
import org.junit.jupiter.api.extension.BeforeAllCallback;
60+
import org.junit.jupiter.api.extension.BeforeEachCallback;
5961
import org.junit.jupiter.api.extension.ConditionEvaluationResult;
6062
import org.junit.jupiter.api.extension.ExecutionCondition;
6163
import org.junit.jupiter.api.extension.Extension;
@@ -92,7 +94,7 @@
9294
* @author Boni Garcia
9395
* @since 1.0.0
9496
*/
95-
public class SeleniumJupiter implements BeforeAllCallback, ParameterResolver,
97+
public class SeleniumJupiter implements BeforeEachCallback, ParameterResolver,
9698
AfterTestExecutionCallback, AfterEachCallback, AfterAllCallback,
9799
TestTemplateInvocationContextProvider, ExecutionCondition,
98100
TestExecutionExceptionHandler, TestWatcher {
@@ -115,7 +117,7 @@ public class SeleniumJupiter implements BeforeAllCallback, ParameterResolver,
115117
.enabled("Test enabled");
116118

117119
Config config;
118-
Map<String, WdmTest> wdmMap;
120+
Map<String, List<WebDriverManager>> wdmMap;
119121
List<DevTools> devToolsList;
120122
AnnotationsReader annotationsReader;
121123
List<List<Browser>> browserListList;
@@ -124,6 +126,7 @@ public class SeleniumJupiter implements BeforeAllCallback, ParameterResolver,
124126
URL urlFromAnnotation;
125127
SelenideHandler selenideHandler;
126128
ExtentReports report;
129+
Map<String, ExtentTest> testMap;
127130

128131
public SeleniumJupiter() {
129132
config = new Config();
@@ -133,10 +136,11 @@ public SeleniumJupiter() {
133136
browserListMap = new ConcurrentHashMap<>();
134137
devToolsList = new ArrayList<>();
135138
selenideHandler = new SelenideHandler(annotationsReader);
139+
testMap = new HashMap<>();
136140
}
137141

138142
@Override
139-
public void beforeAll(ExtensionContext extensionContext) throws Exception {
143+
public void beforeEach(ExtensionContext extensionContext) throws Exception {
140144
Store store = extensionContext.getRoot()
141145
.getStore(ExtensionContext.Namespace.create(STORE_NAMESPACE));
142146
report = store.get(STORE_NAME, ExtentReports.class);
@@ -163,6 +167,9 @@ public void beforeAll(ExtensionContext extensionContext) throws Exception {
163167

164168
Runtime.getRuntime().addShutdownHook(new Thread(report::flush));
165169
}
170+
171+
testMap.put(extensionContext.getUniqueId(),
172+
createExtentTest(report, extensionContext));
166173
}
167174

168175
@Override
@@ -240,9 +247,8 @@ private Object resolveSeleniumWebDriver(ExtensionContext extensionContext,
240247
.getCapabilities(parameter, testInstance);
241248
// Single session
242249
if (isSingleSession(extensionContext) && wdmMap.containsKey(contextId)
243-
&& index < wdmMap.get(contextId).getWdmList().size()) {
244-
WebDriver driver = wdmMap.get(contextId).getWdmList().get(index)
245-
.getWebDriver();
250+
&& index < wdmMap.get(contextId).size()) {
251+
WebDriver driver = wdmMap.get(contextId).get(index).getWebDriver();
246252
if (driver != null) {
247253
log.trace("Returning driver at index {}: {}", index, driver);
248254
return driver;
@@ -334,8 +340,8 @@ private Optional<URL> findUrl(Parameter parameter,
334340

335341
private Object resolveDevTools(String contextId, int index) {
336342
if (wdmMap != null && wdmMap.get(contextId) != null
337-
&& wdmMap.get(contextId).getWdmList().size() >= index) {
338-
WebDriver driver = wdmMap.get(contextId).getWdmList().get(index - 1)
343+
&& wdmMap.get(contextId).size() >= index) {
344+
WebDriver driver = wdmMap.get(contextId).get(index - 1)
339345
.getWebDriver();
340346
log.debug("Opening DevTools for {}", driver);
341347
DevTools devTools = ((HasDevTools) driver).getDevTools();
@@ -532,18 +538,18 @@ private Optional<Capabilities> getCapabilities(
532538
public void afterTestExecution(ExtensionContext extensionContext)
533539
throws Exception {
534540
String contextId = getContextId(extensionContext);
535-
ScreenshotManager screenshotManager = new ScreenshotManager(
536-
extensionContext, getConfig(), outputHandler);
537-
538541
if (wdmMap.containsKey(contextId)) {
539-
ExtentTest test = wdmMap.get(contextId).getTest();
540-
wdmMap.get(contextId).getWdmList().forEach(wdm -> {
542+
Optional<ExtentTest> optionalTest = findTest(extensionContext);
543+
ScreenshotManager screenshotManager = new ScreenshotManager(
544+
extensionContext, getConfig(), outputHandler);
545+
wdmMap.get(contextId).forEach(wdm -> {
541546
wdm.getWebDriverList().forEach(driver -> screenshotManager
542-
.makeScreenshotIfRequired(driver, test));
547+
.makeScreenshotIfRequired(driver, optionalTest));
543548
wdm.stopDockerRecording();
544549
String recordingBase64 = wdm.getRecordingBase64();
545550
if (recordingBase64 != null && !recordingBase64.isEmpty()) {
546-
test.addVideoFromBase64String(recordingBase64);
551+
optionalTest.ifPresent(test -> test
552+
.addVideoFromBase64String(recordingBase64));
547553
}
548554
});
549555
}
@@ -812,13 +818,13 @@ private void putManagerInMap(ExtensionContext extensionContext,
812818
log.trace("Put manager {} in map (context id {})", wdm, contextId);
813819

814820
if (wdmMap.containsKey(contextId)) {
815-
wdmMap.get(contextId).getWdmList().add(wdm);
821+
wdmMap.get(contextId).add(wdm);
816822
log.trace("Adding {} to existing map (id {})", wdm, contextId);
817823
} else {
818-
WdmTest wdmTest = new WdmTest(report, extensionContext);
819-
wdmTest.getWdmList().add(wdm);
820-
wdmMap.put(contextId, wdmTest);
821-
log.trace("Adding {} to new map (id {})", wdmTest, contextId);
824+
List<WebDriverManager> wdmList = new ArrayList<>();
825+
wdmList.add(wdm);
826+
wdmMap.put(contextId, wdmList);
827+
log.trace("Adding {} to new map (id {})", wdm, contextId);
822828
}
823829
}
824830

@@ -845,7 +851,7 @@ private void quitWebDriver(ExtensionContext extensionContext) {
845851
if (wdmMap.containsKey(contextId)) {
846852
Optional<Throwable> executionException = extensionContext
847853
.getExecutionException();
848-
wdmMap.get(contextId).getWdmList().forEach(wdm -> {
854+
wdmMap.get(contextId).forEach(wdm -> {
849855
// Get recording files (to be deleted after quit)
850856
List<Path> recordingList = Collections.emptyList();
851857
if (config.isRecordingWhenFailure()
@@ -928,7 +934,7 @@ public <T> T invokeWdm(String method, Object... params) {
928934
try {
929935
if (!wdmMap.isEmpty()) {
930936
List<WebDriverManager> wdmTestList = wdmMap.entrySet()
931-
.iterator().next().getValue().getWdmList();
937+
.iterator().next().getValue();
932938
WebDriverManager wdm = wdmTestList.get(0);
933939
Method wdmMethod = (params.length == 0)
934940
? wdm.getClass().getMethod(method)
@@ -947,8 +953,8 @@ public <T> T invokeWdm(WebDriver driver, String method, Object... params) {
947953
T out = null;
948954
try {
949955
if (!wdmMap.isEmpty()) {
950-
for (WdmTest wdmTest : wdmMap.values()) {
951-
for (WebDriverManager wdm : wdmTest.getWdmList()) {
956+
for (List<WebDriverManager> wdmList : wdmMap.values()) {
957+
for (WebDriverManager wdm : wdmList) {
952958
Method wdmMethod = (params.length == 0)
953959
? wdm.getClass().getMethod(method)
954960
: wdm.getClass().getMethod(method,
@@ -969,32 +975,76 @@ public <T> T invokeWdm(WebDriver driver, String method, Object... params) {
969975
@Override
970976
public void handleTestExecutionException(ExtensionContext extensionContext,
971977
Throwable throwable) throws Throwable {
972-
String contextId = getContextId(extensionContext);
973-
if (wdmMap.containsKey(contextId)) {
974-
WdmTest wdmTest = wdmMap.get(contextId);
975-
wdmTest.gatherBrowserData();
976-
ExtentTest test = wdmTest.getTest();
978+
findTest(extensionContext).ifPresent(test -> {
979+
gatherBrowserData(test, extensionContext);
977980
test.fail(throwable);
978-
}
981+
});
979982
throw throwable;
980983
}
981984

982985
@Override
983986
public void testDisabled(ExtensionContext extensionContext,
984987
Optional<String> reason) {
985-
String contextId = getContextId(extensionContext);
986-
if (wdmMap.containsKey(contextId)) {
987-
wdmMap.get(contextId).getTest()
988-
.skip(reason.orElse("Disabled test"));
989-
}
988+
findTest(extensionContext)
989+
.ifPresent(test -> test.skip(reason.orElse("Disabled test")));
990990
}
991991

992992
@Override
993993
public void testAborted(ExtensionContext extensionContext,
994994
Throwable cause) {
995+
findTest(extensionContext).ifPresent(test -> test.skip(cause));
996+
}
997+
998+
private ExtentTest createExtentTest(ExtentReports report,
999+
ExtensionContext context) {
1000+
String displayName = context.getDisplayName();
1001+
String testName = context.getTestClass()
1002+
.map(testClass -> testClass.getSimpleName() + "." + displayName)
1003+
.orElse(displayName);
1004+
ExtentTest extentTest = report.createTest(testName);
1005+
context.getTags().forEach(extentTest::assignCategory);
1006+
return extentTest;
1007+
}
1008+
1009+
private Optional<ExtentTest> findTest(ExtensionContext extensionContext) {
1010+
Optional<ExtentTest> test = Optional.empty();
1011+
String uniqueId = extensionContext.getUniqueId();
1012+
if (testMap.containsKey(uniqueId)) {
1013+
test = Optional.of(testMap.get(uniqueId));
1014+
}
1015+
return test;
1016+
}
1017+
1018+
private void gatherBrowserData(ExtentTest test,
1019+
ExtensionContext extensionContext) {
9951020
String contextId = getContextId(extensionContext);
1021+
List<WebDriverManager> wdmList = wdmMap.get(contextId);
9961022
if (wdmMap.containsKey(contextId)) {
997-
wdmMap.get(contextId).getTest().skip(cause);
1023+
for (WebDriverManager wdm : wdmList) {
1024+
for (WebDriver driver : wdm.getWebDriverList()) {
1025+
String driverInfo = driver.toString();
1026+
1027+
// Screenshot
1028+
String base64Screenshot = ScreenshotManager
1029+
.getBase64Screenshot(driver);
1030+
test.addScreenCaptureFromBase64String(base64Screenshot,
1031+
driverInfo);
1032+
1033+
// Logs
1034+
List<Map<String, Object>> logs = wdm.getLogs(driver);
1035+
if (logs != null && !logs.isEmpty()) {
1036+
String logAsString = logs.stream()
1037+
.map(entry -> String.format("[%s] [%s] %s",
1038+
entry.get("datetime"),
1039+
entry.get("type"),
1040+
entry.get("message")))
1041+
.collect(Collectors
1042+
.joining(System.lineSeparator()));
1043+
test.info(String.format(FORMATTED_INFO,
1044+
driverInfo + " console", logAsString));
1045+
}
1046+
}
1047+
}
9981048
}
9991049
}
10001050

src/main/java/io/github/bonigarcia/seljup/WdmTest.java

Lines changed: 0 additions & 98 deletions
This file was deleted.

0 commit comments

Comments
 (0)