diff --git a/pom.xml b/pom.xml
index 517d21ad..df822662 100644
--- a/pom.xml
+++ b/pom.xml
@@ -101,6 +101,8 @@
dougnoel_sentinel
dougnoel
https://sonarcloud.io
+
+ 0.7.7.0
@@ -369,6 +371,13 @@
import
+
+
+ com.github.stephenc.monte
+ monte-screen-recorder
+ ${screen-recorder.version}
+
+
org.apache.commons
commons-lang3
@@ -534,6 +543,11 @@
org.apache.logging.log4j
log4j-api
+
+
+ com.github.stephenc.monte
+ monte-screen-recorder
+
org.apache.commons
diff --git a/src/main/java/com/dougnoel/sentinel/filemanagers/SentinelScreenRecorder.java b/src/main/java/com/dougnoel/sentinel/filemanagers/SentinelScreenRecorder.java
new file mode 100644
index 00000000..602ec680
--- /dev/null
+++ b/src/main/java/com/dougnoel/sentinel/filemanagers/SentinelScreenRecorder.java
@@ -0,0 +1,31 @@
+package com.dougnoel.sentinel.filemanagers;
+
+import java.awt.*;
+import org.monte.media.Format;
+import org.monte.media.math.Rational;
+import org.monte.screenrecorder.ScreenRecorder;
+import static org.monte.media.AudioFormatKeys.*;
+import static org.monte.media.VideoFormatKeys.*;
+
+public class SentinelScreenRecorder {
+ private static ScreenRecorder screenRecorder;
+
+ public static void startRecording() throws Exception {
+
+ GraphicsConfiguration gc = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice()
+ .getDefaultConfiguration();
+ screenRecorder = new ScreenRecorder(gc, new Format(MediaTypeKey, MediaType.FILE, MimeTypeKey, MIME_AVI),
+ new Format(MediaTypeKey, MediaType.VIDEO, EncodingKey, ENCODING_AVI_TECHSMITH_SCREEN_CAPTURE,
+ CompressorNameKey, ENCODING_AVI_TECHSMITH_SCREEN_CAPTURE, DepthKey, 24, FrameRateKey,
+ Rational.valueOf(15), QualityKey, 1.0f, KeyFrameIntervalKey, 15 * 60),
+ new Format(MediaTypeKey, MediaType.VIDEO, EncodingKey, "black", FrameRateKey, Rational.valueOf(30)),
+ null);
+ screenRecorder.start();
+
+ }
+
+ public static void stopRecording() throws Exception {
+ screenRecorder.stop();
+ }
+
+}
diff --git a/src/main/java/com/dougnoel/sentinel/steps/BaseSteps.java b/src/main/java/com/dougnoel/sentinel/steps/BaseSteps.java
index 5f9e7beb..63d253d1 100644
--- a/src/main/java/com/dougnoel/sentinel/steps/BaseSteps.java
+++ b/src/main/java/com/dougnoel/sentinel/steps/BaseSteps.java
@@ -7,6 +7,7 @@
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+import com.aventstack.extentreports.cucumber.adapter.ExtentCucumberAdapter;
import com.dougnoel.sentinel.configurations.Configuration;
import com.dougnoel.sentinel.configurations.Time;
import com.dougnoel.sentinel.pages.PageManager;
@@ -14,6 +15,7 @@
import io.cucumber.java.Before;
import io.cucumber.java.Scenario;
import io.cucumber.java.en.Given;
+import io.cucumber.java.en.Then;
import io.cucumber.java.en.When;
/**
@@ -173,4 +175,10 @@ public static void pressBrowserButton(String option) {
}
}
-}
\ No newline at end of file
+ @Then("^video recording (.*?)( was not)?(?: was)? attached to the report?$")
+ public static void addVideoToReport(String elementName, String assertion) {
+ if(Configuration.toString("addVideoToReport")!=null && !elementName.contains("not"))
+ ExtentCucumberAdapter.addTestStepLog("Click to see video recording");
+
+ }
+}
diff --git a/src/test/java/features/47 Swag Labs Login.feature b/src/test/java/features/47 Swag Labs Login.feature
index 434cded2..fe1898b9 100644
--- a/src/test/java/features/47 Swag Labs Login.feature
+++ b/src/test/java/features/47 Swag Labs Login.feature
@@ -13,10 +13,13 @@ Feature: 47 Swag Labs Login
And I click the Login Button
Then I am redirected to the Sauce Demo Main Page
And I verify the App Logo exists
+ And video recording was attached to the report
@47B
Scenario: 47B Failed Login with Locked Out User
Given I am on the Sauce Demo Login Page
When I fill the account information for account LockedOutUser into the Username field and the Password field
And I click the Login Button
- Then I verify the Error Message contains the text "Sorry, this user has been locked out."
\ No newline at end of file
+ Then I verify the Error Message contains the text "Sorry, this user has been locked out."
+ And video recording was not attached to the report
+
\ No newline at end of file
diff --git a/src/test/java/tests/SentinelTests.java b/src/test/java/tests/SentinelTests.java
index 047281a3..daaef1a6 100644
--- a/src/test/java/tests/SentinelTests.java
+++ b/src/test/java/tests/SentinelTests.java
@@ -5,14 +5,13 @@
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.runner.RunWith;
-
import com.dougnoel.sentinel.configurations.Configuration;
-import com.dougnoel.sentinel.exceptions.SentinelException;
+import com.dougnoel.sentinel.filemanagers.SentinelScreenRecorder;
import com.dougnoel.sentinel.pages.PageManager;
import com.dougnoel.sentinel.webdrivers.WebDriverFactory;
+import io.cucumber.junit.CucumberOptions;
import io.cucumber.junit.Cucumber;
-import io.cucumber.junit.CucumberOptions;
@RunWith(Cucumber.class)
@CucumberOptions(monochrome = true
@@ -26,13 +25,16 @@
public class SentinelTests {
private static final Logger log = LogManager.getLogger(SentinelTests.class); // Create a logger.
- @BeforeClass
- public static void setUpBeforeAnyTestsAreRun() throws SentinelException {
- WebDriverFactory.instantiateWebDriver();
- }
-
+ @BeforeClass
+ public static void setUpBeforeClass() throws Exception {
+ WebDriverFactory.instantiateWebDriver();
+// if(Configuration.toString("addVideoToReport")!=null)
+
+ SentinelScreenRecorder.startRecording();
+ }
+
@AfterClass
- public static void tearDownAfterClass() throws SentinelException {
+ public static void tearDownAfterClass() throws Exception {
String totalWaitTime = Configuration.toString("totalWaitTime");
if (totalWaitTime != null) {
log.warn("This test took {} total seconds longer due to explicit waits. Sentinel handles dynamic waits. If you have a reason for adding explicit waits, you should probably be logging a bug ticket to get the framework fixed at: http://https://github.com/dougnoel/sentinel/issues", totalWaitTime);
@@ -41,5 +43,7 @@ public static void tearDownAfterClass() throws SentinelException {
if (System.getProperty("leaveBrowserOpen", "false") == "false") {
PageManager.quit();
}
+// if(Configuration.toString("addVideoToReport")!=null)
+ SentinelScreenRecorder.stopRecording();
}
}