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();