Skip to content

Commit

Permalink
+ MVE reproducing serenity-bdd/serenity-core#2470 and allowing to tes…
Browse files Browse the repository at this point in the history
…t fixes
  • Loading branch information
Simon Beyer authored and Simon Beyer committed Aug 22, 2022
1 parent 0ba0204 commit 4ac4989
Show file tree
Hide file tree
Showing 10 changed files with 289 additions and 1 deletion.
11 changes: 11 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
root = true

[*]
charset = utf-8
end_of_line = unset
indent_size = unset
indent_style = tab
insert_final_newline = true
max_line_length = off
tab_width = unset
trim_trailing_whitespace = true
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
.idea
target
27 changes: 26 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,27 @@
# MVE_SerenityBDD_cannotCauseAlertWithoutDestroyingIt
Reproduces https://github.com/serenity-bdd/serenity-core/issues/2470

# Usage

- adjust if necessary: only configured to use
- Chrome
- Maven
- Java 18

1. mvn verify
- should wait for you to attach a debugger
- should download chromedriver into target folder, if none found (but it seems to find one from idk where on my machine, so it never downloads... - sorry if it does not work)
2. prepare breakpoints
1. enabled in `StepInterceptor.executeTestStepMethod` after `invokeMethod`
2. disabled in `WebDriverFacade.getScreenshotAs` at `getScreenshotAs`
3. attach debugger to maven process offered in StdOut
4. when reaching 2.1 and the alert is visible in the Browser, enable 2.2
5. when reaching 2.2 the alert is gone
6. locally build a snapshot of [this fork](https://github.com/Zsar/serenity-core/tree/fix/2470-cannotCauseAlertWithoutDestroyingIt)
- mvn install -T1C -q -DskipTests
- note project.version in pom.xml
7. use locally built snapshop here
- update version of serenity-core in pom.xml with value from 6
- mvn clean compile -U
8. repeat steps 1 - 5 => now works as expected

Refer to [discussion starting here](https://github.com/serenity-bdd/serenity-core/issues/2470#issuecomment-1221334308) for more in-depth analysis.
137 changes: 137 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>net.zsar.serenity-bdd.mve</groupId>
<artifactId>mve-cannot-cause-alert-without-destroying-it</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>MVE_SerenityBDD_cannotCauseAlertWithoutDestroyingIt</name>

<properties>
<encoding>UTF-8</encoding>
<maven.compiler.source>18</maven.compiler.source>
<maven.compiler.target>${maven.compiler.source}</maven.compiler.target>
<maven.failsafe.debug>true</maven.failsafe.debug>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<serenity.version>3.3.2</serenity.version>
<serenity.maven.version>${serenity.version}</serenity.maven.version>
<webdriver.base.url>file://${project.build.testSourceDirectory}/../resources/Test.html</webdriver.base.url>
</properties>

<dependencies>
<dependency>
<groupId>net.serenity-bdd</groupId>
<artifactId>serenity-core</artifactId>
<version>${serenity.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>net.serenity-bdd</groupId>
<artifactId>serenity-screenplay</artifactId>
<version>${serenity.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>net.serenity-bdd</groupId>
<artifactId>serenity-screenplay-rest</artifactId>
<version>${serenity.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>net.serenity-bdd</groupId>
<artifactId>serenity-screenplay-webdriver</artifactId>
<version>${serenity.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>net.serenity-bdd</groupId>
<artifactId>serenity-rest-assured</artifactId>
<version>${serenity.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>net.serenity-bdd</groupId>
<artifactId>serenity-ensure</artifactId>
<version>${serenity.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.0.13</version>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M5</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<version>3.0.0-M5</version>
<configuration>
<includes>
<include>**/*Test.java</include>
<include>**/Test*.java</include>
<include>**/*TestSuite.java</include>
<include>**/When*.java</include>
</includes>
<systemPropertyVariables>
<webdriver.base.url>${webdriver.base.url}</webdriver.base.url>
</systemPropertyVariables>
<parallel>classes</parallel>
<!-- <parallel>methods</parallel> -->
<!-- <useUnlimitedThreads>true</useUnlimitedThreads> -->
<threadCount>2</threadCount>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.2</version>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
<plugin>
<groupId>net.serenity-bdd.maven.plugins</groupId>
<artifactId>serenity-maven-plugin</artifactId>
<version>${serenity.maven.version}</version>
<configuration>
</configuration>
<dependencies>
<dependency>
<groupId>net.serenity-bdd</groupId>
<artifactId>serenity-core</artifactId>
<version>${serenity.version}</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>serenity-reports</id>
<phase>post-integration-test</phase>
<goals>
<goal>aggregate</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
35 changes: 35 additions & 0 deletions src/test/java/net/zsar/serenitybdd/mve/TestPage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package net.zsar.serenitybdd.mve;

import net.serenitybdd.core.pages.PageObject;
import net.serenitybdd.screenplay.Actor;
import net.serenitybdd.screenplay.Performable;
import net.serenitybdd.screenplay.Task;
import net.serenitybdd.screenplay.actions.Click;
import net.serenitybdd.screenplay.actions.Switch;
import net.serenitybdd.screenplay.ensure.Ensure;
import net.serenitybdd.screenplay.targets.Target;
import org.openqa.selenium.By;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.time.Duration;

public class TestPage extends PageObject {
static final Target BUTTON = Target.the("alert button").located(By.xpath("//button"));

public Performable pushTheButton() {
return Task.where("{0} pushed the button and confirmed the alert"
, Ensure.that(BUTTON).isDisplayed()
, Click.on(BUTTON)
, new ClickOnAlert()
);
}

class ClickOnAlert implements Task {
@Override
public void performAs(final Actor actor) {
final var alert = new WebDriverWait(getDriver(), Duration.ZERO).until(ExpectedConditions.alertIsPresent());
alert.accept();
}
}
}
25 changes: 25 additions & 0 deletions src/test/java/net/zsar/serenitybdd/mve/TestTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package net.zsar.serenitybdd.mve;

import net.serenitybdd.junit.runners.SerenityRunner;
import net.serenitybdd.screenplay.Actor;
import net.serenitybdd.screenplay.abilities.BrowseTheWeb;
import net.serenitybdd.screenplay.actions.Open;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.openqa.selenium.WebDriver;

@RunWith(SerenityRunner.class)
public class TestTest {
TestPage testPage;
WebDriver webDriver;

/** reproduces <a href="https://github.com/serenity-bdd/serenity-core/issues/2470">2470</a> */
@Test
public void pushTheButton() {
final var actor = Actor.named("Hobbyist").whoCan(BrowseTheWeb.with(this.webDriver));
actor.attemptsTo(
Open.browserOn(this.testPage)
, this.testPage.pushTheButton()
);
}
}
10 changes: 10 additions & 0 deletions src/test/resources/Test.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>MVE_SerenityBDD_cannotCauseAlertWithoutDestroyingIt</title>
</head>
<body>
<button name="alert" onclick="window.alert('The test must confirm this alert to succeed!')">trigger alert</button>
</body>
</html>
8 changes: 8 additions & 0 deletions src/test/resources/log4j.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Root logger option
log4j.rootLogger=DEBUG, stdout

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{HH:mm:ss.SSS} [%t] %-5p %c{1} - %m%n
13 changes: 13 additions & 0 deletions src/test/resources/log4j2.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</Console>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
22 changes: 22 additions & 0 deletions src/test/resources/serenity.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# define variables
# https://github.com/serenity-bdd/serenity-core/issues/2470
# https://github.com/serenity-bdd/serenity-core/issues/2470#issuecomment-858463545
driver_capabilities.common.unexpectedAlertBehaviour=ignore
headless.mode = false
chrome {
preferences.download.default_directory="${user.dir}\\target"
preferences.profile.default_content_settings.popupsy=0
switches = """--window-size=1920,1200; --test-type; --no-sandbox; --ignore-certificate-errors; --disable-dev-shm-usage; --disable-popup-blocking; --disable-default-apps; --disable-extensions-file-access-check; --incognito; --disable-infobars; --disable-gpu; --acceptInsecureCerts; --lang=en"""
}
serenity {
restart.browser.for.each = never
take.screenshots.for{
tasks=after_each_step
interactions=for_failures
questions=after_each_step
}
}
webdriver {
driver=chrome
autodownload = true
}

0 comments on commit 4ac4989

Please sign in to comment.