+
+
+> ⚠️ **Performance**%2$s of element %1$s is %3$s
+ beforeGetScreenshotAs:
+ level: INFO
+ message: Getting screenshot as %2$s
+ afterGetScreenshotAs:
+ level: ERROR
+ message: Screenshot as %2$s resulted is %3$s
beforeAnyNavigationCall:
message: Calling navigation method %2$s with args %3$s
afterAnyNavigationCall:
@@ -533,15 +554,33 @@ eventsConsumers:
events:
- reason: beforeExecution
tags: [ dynamicTest ]
+ - genericScreenshot: # common operations on screenshots
+ events:
+ - primaryId: .*
+ reason: screenshot
+ - extentScreenshot: # add the screenshot to the Extent Report
+ events:
+ - primaryId: (manual)
+ reason: screenshot
- video: # add the screenshot to the video
events:
- - primaryId: screenshot
+ - primaryId: (manual|autoBefore|autoAfter)
reason: screenshot
- videoDynamic: # add the screenshot to the dynamic video
events:
- - primaryId: screenshot
+ - primaryId: (manual|autoBefore|autoAfter)
+ reason: screenshot
+ - visualRegressionCheck: # check the previously generated screenshot reference for visual regression
+ failOnError: true # to enable fail fast effectively break the test immediately
+ events:
+ - primaryId: (manual|autoBefore|autoAfter)
+ reason: screenshot
+ - visualRegressionReferenceCreator: # create the screenshot reference for visual regression
+ failOnError: true # to enable failed checks break the test immediately
+ events:
+ - primaryId: (manual|autoBefore|autoAfter)
reason: screenshot
- - extentTest: # add an entry to the Extent Report once each test is done
+ - extentTestEnd: # add an entry to the Extent Report once each test is done
events:
- reason: after
tags: [ test ]
diff --git a/spectrum/src/test/java/io/github/giulong/spectrum/MockFinal.java b/spectrum/src/test/java/io/github/giulong/spectrum/MockFinal.java
new file mode 100644
index 000000000..7ee829162
--- /dev/null
+++ b/spectrum/src/test/java/io/github/giulong/spectrum/MockFinal.java
@@ -0,0 +1,12 @@
+package io.github.giulong.spectrum;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+@Target(FIELD)
+@Retention(RUNTIME)
+public @interface MockFinal {
+}
diff --git a/spectrum/src/test/java/io/github/giulong/spectrum/SpectrumEntityTest.java b/spectrum/src/test/java/io/github/giulong/spectrum/SpectrumEntityTest.java
index 09363ab7d..bb9822080 100644
--- a/spectrum/src/test/java/io/github/giulong/spectrum/SpectrumEntityTest.java
+++ b/spectrum/src/test/java/io/github/giulong/spectrum/SpectrumEntityTest.java
@@ -1,41 +1,39 @@
package io.github.giulong.spectrum;
-import static com.aventstack.extentreports.Status.*;
-import static io.github.giulong.spectrum.SpectrumEntity.HASH_ALGORITHM;
+import static com.aventstack.extentreports.Status.FAIL;
+import static com.aventstack.extentreports.Status.INFO;
+import static com.aventstack.extentreports.Status.WARNING;
import static io.github.giulong.spectrum.enums.Frame.MANUAL;
-import static io.github.giulong.spectrum.extensions.resolvers.DriverResolver.DRIVER;
+import static io.github.giulong.spectrum.extensions.resolvers.DriverResolver.ORIGINAL_DRIVER;
import static io.github.giulong.spectrum.extensions.resolvers.TestContextResolver.EXTENSION_CONTEXT;
-import static io.github.giulong.spectrum.utils.web_driver_events.ScreenshotConsumer.SCREENSHOT;
-import static org.junit.jupiter.api.Assertions.*;
+import static io.github.giulong.spectrum.utils.web_driver_events.VideoAutoScreenshotProducer.SCREENSHOT;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.extension.ExtensionContext.Namespace.GLOBAL;
import static org.junit.jupiter.params.provider.Arguments.arguments;
import static org.mockito.Mockito.*;
import static org.openqa.selenium.OutputType.BYTES;
import java.io.File;
-import java.io.IOException;
import java.lang.reflect.Field;
import java.nio.file.Files;
import java.nio.file.Path;
import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
import java.util.List;
-import java.util.Map;
import java.util.function.Function;
import java.util.stream.Stream;
-import com.aventstack.extentreports.ExtentTest;
import com.aventstack.extentreports.MediaEntityBuilder;
import com.aventstack.extentreports.Status;
-import com.aventstack.extentreports.model.Media;
import io.github.giulong.spectrum.interfaces.Shared;
-import io.github.giulong.spectrum.types.TestData;
-import io.github.giulong.spectrum.utils.*;
+import io.github.giulong.spectrum.pojos.events.Event.Payload;
+import io.github.giulong.spectrum.utils.Configuration;
+import io.github.giulong.spectrum.utils.FileUtils;
+import io.github.giulong.spectrum.utils.Reflections;
+import io.github.giulong.spectrum.utils.TestContext;
import io.github.giulong.spectrum.utils.events.EventsDispatcher;
-import io.github.giulong.spectrum.utils.video.Video;
-
-import lombok.SneakyThrows;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
@@ -47,7 +45,10 @@
import org.junit.jupiter.params.provider.MethodSource;
import org.junit.jupiter.params.provider.ValueSource;
import org.mockito.*;
-import org.openqa.selenium.*;
+import org.openqa.selenium.By;
+import org.openqa.selenium.TakesScreenshot;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.WebDriverWait;
@@ -58,32 +59,19 @@ class SpectrumEntityTest {
private MockedStatic