From 5e1eb7fbfee1572e6529e7fd683b93c161c6e958 Mon Sep 17 00:00:00 2001
From: JanTrnavsky <47607771+JanTrnavsky@users.noreply.github.com>
Date: Wed, 12 Jul 2023 18:21:36 +0200
Subject: [PATCH 1/5] [#10] try to do screenshot on test failure
---
.gitignore | 3 +-
.../cz/czechitas/automation/TestRunner.java | 6 ++++
.../extension/ScreenshotOnFailExtension.java | 36 +++++++++++++++++++
3 files changed, 44 insertions(+), 1 deletion(-)
create mode 100644 src/test/java/cz/czechitas/automation/extension/ScreenshotOnFailExtension.java
diff --git a/.gitignore b/.gitignore
index 6e03978..32cbd76 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
*.iml
/target/
-/.idea/
\ No newline at end of file
+/.idea/
+/failedScreenshots/
\ No newline at end of file
diff --git a/src/test/java/cz/czechitas/automation/TestRunner.java b/src/test/java/cz/czechitas/automation/TestRunner.java
index 42bbb9a..539d364 100644
--- a/src/test/java/cz/czechitas/automation/TestRunner.java
+++ b/src/test/java/cz/czechitas/automation/TestRunner.java
@@ -1,7 +1,9 @@
package cz.czechitas.automation;
+import cz.czechitas.automation.extension.ScreenshotOnFailExtension;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.extension.RegisterExtension;
import org.openqa.selenium.WebDriver;
import cz.czechitas.automation.assertion.AssertionFacade;
@@ -18,10 +20,14 @@ class TestRunner {
protected final SeleniumActionFacade prohlizec;
protected final AssertionFacade overeni;
+ @RegisterExtension
+ final ScreenshotOnFailExtension screenshotExtension;
+
public TestRunner() {
this.webDriver = WebDriverProvider.getWebDriver();
this.prohlizec = new SeleniumActionFacade(webDriver);
this.overeni = new AssertionFacade(webDriver);
+ this.screenshotExtension = new ScreenshotOnFailExtension(webDriver);
}
@BeforeEach
diff --git a/src/test/java/cz/czechitas/automation/extension/ScreenshotOnFailExtension.java b/src/test/java/cz/czechitas/automation/extension/ScreenshotOnFailExtension.java
new file mode 100644
index 0000000..7126e36
--- /dev/null
+++ b/src/test/java/cz/czechitas/automation/extension/ScreenshotOnFailExtension.java
@@ -0,0 +1,36 @@
+package cz.czechitas.automation.extension;
+
+import org.apache.commons.io.FileUtils;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.api.extension.TestExecutionExceptionHandler;
+import org.openqa.selenium.OutputType;
+import org.openqa.selenium.TakesScreenshot;
+import org.openqa.selenium.WebDriver;
+
+import java.io.File;
+import java.io.IOException;
+
+public class ScreenshotOnFailExtension implements TestExecutionExceptionHandler {
+
+ private final WebDriver driver;
+
+ public ScreenshotOnFailExtension(WebDriver driver) {
+ this.driver = driver;
+ }
+
+ @Override
+ public void handleTestExecutionException(ExtensionContext context, Throwable cause) throws Throwable {
+
+ if (driver != null) {
+ File screenshotFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
+ try {
+ String SCREENSHOT_DIRECTORY = "failedScreenshots/";
+ FileUtils.copyFile(screenshotFile, new File(SCREENSHOT_DIRECTORY + context.getDisplayName() + ".png"));
+ } catch (IOException e) {
+ System.out.println("Could not save taken screenshot: " + e);
+ }
+ }
+
+ throw cause; // Re-throw the exception to allow JUnit to handle it
+ }
+}
From 993f5dfdf9eb0b3608b4715f763b4217030dc965 Mon Sep 17 00:00:00 2001
From: JanTrnavsky <47607771+JanTrnavsky@users.noreply.github.com>
Date: Wed, 12 Jul 2023 18:46:05 +0200
Subject: [PATCH 2/5] CI GH actions POC
---
.github/workflows/run-tests.yml | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
create mode 100644 .github/workflows/run-tests.yml
diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml
new file mode 100644
index 0000000..06b6f45
--- /dev/null
+++ b/.github/workflows/run-tests.yml
@@ -0,0 +1,23 @@
+name: Java CI with Maven
+on: pull_request
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - name: Set up JDK
+ uses: actions/setup-java@v3
+ with:
+ java-version: '17'
+ distribution: 'microsoft'
+
+ - name: Build with Maven
+ run: mvn test --file pom.xml
+
+ - name: Upload failed test screenshots
+ uses: actions/upload-artifact@v3
+ if: failure()
+ with:
+ name: my-artifact
+ path: failedScreenshots/*
+ retention-days: 7
\ No newline at end of file
From c7834f9df959b9f5489800b86339685f22d1ee80 Mon Sep 17 00:00:00 2001
From: JanTrnavsky <47607771+JanTrnavsky@users.noreply.github.com>
Date: Wed, 12 Jul 2023 18:55:27 +0200
Subject: [PATCH 3/5] add surefire plugin to make maven test work well
---
pom.xml | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/pom.xml b/pom.xml
index dc3be6e..6cb5aa2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,6 +14,18 @@
UTF-8
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 3.1.2
+
+
+
+
+
org.seleniumhq.selenium
From 15b173ac14e882dad07df03bd490b67042a344b4 Mon Sep 17 00:00:00 2001
From: JanTrnavsky <47607771+JanTrnavsky@users.noreply.github.com>
Date: Wed, 12 Jul 2023 18:59:04 +0200
Subject: [PATCH 4/5] run chrome headless
---
.github/workflows/run-tests.yml | 4 +++-
src/main/java/cz/czechitas/automation/WebDriverProvider.java | 1 +
2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml
index 06b6f45..b0104ac 100644
--- a/.github/workflows/run-tests.yml
+++ b/.github/workflows/run-tests.yml
@@ -1,10 +1,12 @@
-name: Java CI with Maven
+name: Run Selenium tests on PR
on: pull_request
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
+ - uses: nanasess/setup-chromedriver@v2
+
- name: Set up JDK
uses: actions/setup-java@v3
with:
diff --git a/src/main/java/cz/czechitas/automation/WebDriverProvider.java b/src/main/java/cz/czechitas/automation/WebDriverProvider.java
index 901535c..68a1b4b 100644
--- a/src/main/java/cz/czechitas/automation/WebDriverProvider.java
+++ b/src/main/java/cz/czechitas/automation/WebDriverProvider.java
@@ -48,6 +48,7 @@ private static WebDriver createChromeDriver() {
try {
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
+ options.addArguments("--headless=new");
return WebDriverManager.chromedriver().capabilities(options).create();
} catch (WebDriverManagerException exception1) {
return createEdgeDriver();
From 118ee60bc6bdb7ebe83838ff3374045b569154bc Mon Sep 17 00:00:00 2001
From: JanTrnavsky <47607771+JanTrnavsky@users.noreply.github.com>
Date: Wed, 12 Jul 2023 19:07:53 +0200
Subject: [PATCH 5/5] fail on purpose
---
src/test/java/cz/czechitas/automation/ExampleTest.java | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/src/test/java/cz/czechitas/automation/ExampleTest.java b/src/test/java/cz/czechitas/automation/ExampleTest.java
index 6e62f97..c2ca29e 100644
--- a/src/test/java/cz/czechitas/automation/ExampleTest.java
+++ b/src/test/java/cz/czechitas/automation/ExampleTest.java
@@ -18,6 +18,11 @@ void overKontaktniWwwAdresu() {
overeni.overAdresuWwwStranky("www.czechitas.cz");
}
+ @Test
+ void failDemo() {
+ assert false;
+ }
+
@Test
void overUspesnePrihlaseni() {
prohlizec.prihlasovani.klikniNaTlacitkoPrihlasit();