diff --git a/pom.xml b/pom.xml
index ee87942..57e3b19 100644
--- a/pom.xml
+++ b/pom.xml
@@ -72,6 +72,12 @@
1.3
test
+
+ io.mockk
+ mockk
+ 1.12.0
+ test
+
org.jetbrains.kotlin
@@ -90,6 +96,11 @@
1.5.4
test
+
+ org.seleniumhq.selenium
+ selenium-api
+ 3.141.59
+
src/test/kotlin
diff --git a/src/main/java/starter/README.md b/src/main/java/starter/README.md
deleted file mode 100644
index c3de858..0000000
--- a/src/main/java/starter/README.md
+++ /dev/null
@@ -1,4 +0,0 @@
-### Application code
-
-These packages generally contain application code.
-If you are writing a reusable test library, you can also place reusable test components such as Page Objects or Tasks here.
\ No newline at end of file
diff --git a/src/main/kotlin/Ability.kt b/src/main/kotlin/Ability.kt
new file mode 100644
index 0000000..d1db2a1
--- /dev/null
+++ b/src/main/kotlin/Ability.kt
@@ -0,0 +1,3 @@
+interface Ability {
+
+}
diff --git a/src/main/kotlin/Actor.kt b/src/main/kotlin/Actor.kt
new file mode 100644
index 0000000..989bcb7
--- /dev/null
+++ b/src/main/kotlin/Actor.kt
@@ -0,0 +1,17 @@
+import ability.BrowseTheWeb
+import org.openqa.selenium.WebDriver
+
+class Actor(val abilities: MutableList = mutableListOf()) {
+
+
+ var webDriver: WebDriver? = null
+
+ fun perform(performable: Performable) = performable.performAs(this)
+
+ fun asks(question: Question): Any = question.answerAs(this)
+ fun can(ability: Ability) {
+ when (ability) {
+ is BrowseTheWeb -> webDriver = ability.webDriver
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/BrowserInteraction.kt b/src/main/kotlin/BrowserInteraction.kt
new file mode 100644
index 0000000..86b7af1
--- /dev/null
+++ b/src/main/kotlin/BrowserInteraction.kt
@@ -0,0 +1,10 @@
+import ability.BrowseTheWeb
+
+interface BrowserInteraction : Interaction {
+
+ override fun performUsing(ability: BrowseTheWeb)
+
+ override fun performAs(actor: Actor) {
+ performUsing(BrowseTheWeb.with(actor.webDriver!!))
+ }
+}
diff --git a/src/main/kotlin/Interaction.kt b/src/main/kotlin/Interaction.kt
new file mode 100644
index 0000000..43aa7ce
--- /dev/null
+++ b/src/main/kotlin/Interaction.kt
@@ -0,0 +1,6 @@
+interface Interaction : Performable {
+
+
+ fun performUsing(ability: A)
+
+}
diff --git a/src/main/kotlin/Performable.kt b/src/main/kotlin/Performable.kt
new file mode 100644
index 0000000..57586ad
--- /dev/null
+++ b/src/main/kotlin/Performable.kt
@@ -0,0 +1,5 @@
+interface Performable {
+
+ fun performAs(actor: Actor)
+
+}
diff --git a/src/main/kotlin/Question.kt b/src/main/kotlin/Question.kt
new file mode 100644
index 0000000..4f86311
--- /dev/null
+++ b/src/main/kotlin/Question.kt
@@ -0,0 +1,9 @@
+fun interface Question {
+ fun answerAs(actor: Actor): Any {
+ val ability = actor.abilities[0]
+ return answerUsingAbility(ability)
+ }
+
+ fun answerUsingAbility(ability: Ability): Any
+
+}
diff --git a/src/main/kotlin/Task.kt b/src/main/kotlin/Task.kt
new file mode 100644
index 0000000..c8a057b
--- /dev/null
+++ b/src/main/kotlin/Task.kt
@@ -0,0 +1,3 @@
+interface Task : Performable {
+
+}
diff --git a/src/main/kotlin/ability/BrowseTheWeb.kt b/src/main/kotlin/ability/BrowseTheWeb.kt
new file mode 100644
index 0000000..6379066
--- /dev/null
+++ b/src/main/kotlin/ability/BrowseTheWeb.kt
@@ -0,0 +1,12 @@
+package ability
+
+import Ability
+import org.openqa.selenium.WebDriver
+
+class BrowseTheWeb(val webDriver: WebDriver) : Ability {
+
+
+ companion object {
+ fun with(webdriver: WebDriver): BrowseTheWeb = BrowseTheWeb(webdriver)
+ }
+}
diff --git a/src/test/kotlin/AbilityTest.kt b/src/test/kotlin/AbilityTest.kt
new file mode 100644
index 0000000..e6059df
--- /dev/null
+++ b/src/test/kotlin/AbilityTest.kt
@@ -0,0 +1,72 @@
+import ability.BrowseTheWeb
+import io.mockk.confirmVerified
+import io.mockk.impl.annotations.RelaxedMockK
+import io.mockk.impl.annotations.SpyK
+import io.mockk.verify
+import org.junit.Assert.*
+import org.junit.Test
+import org.openqa.selenium.WebDriver
+
+class AbilityTest {
+
+
+ @RelaxedMockK
+ lateinit var mockAbility: Ability
+
+ @SpyK
+ var task = object : Task {
+ override fun performAs(actor: Actor) {}
+ }
+
+
+ @SpyK
+ var interaction = object : Interaction {
+ override fun performUsing(ability: Ability) {}
+ override fun performAs(actor: Actor) {
+ performUsing(actor.abilities.first())
+ }
+ }
+
+ @Test
+ fun `ability enables interaction`() {
+ val actor = Actor(abilities = mutableListOf(mockAbility))
+ actor.perform(interaction)
+ verify(exactly = 1) { interaction.performUsing(mockAbility) }
+ verify(exactly = 1) { interaction.performAs(actor) }
+ confirmVerified(interaction)
+
+ }
+
+ @Test
+ fun `no ability to interact will throw`() {
+ val actor = Actor()
+ assertThrows(NoSuchElementException::class.java) {
+ actor.perform(interaction)
+ }
+ }
+
+ @Test
+ fun `tasks don't need abilities`() {
+ val actor = Actor()
+ actor.perform(task)
+ verify(exactly = 1) { task.performAs(actor) }
+ confirmVerified(interaction)
+ }
+
+ @RelaxedMockK
+ lateinit var browser: WebDriver
+
+ @Test
+ internal fun `ability to browse with a webdriver`() {
+ val actor = Actor()
+ actor.can(BrowseTheWeb.with(browser))
+ actor.perform(object : BrowserInteraction {
+ override fun performUsing(ability: BrowseTheWeb) {
+ ability.webDriver.navigate().to("page")
+ }
+ })
+ verify(exactly = 1) { browser.navigate().to("page") }
+ confirmVerified(browser)
+
+ }
+}
diff --git a/src/test/kotlin/ActorTest.kt b/src/test/kotlin/ActorTest.kt
new file mode 100644
index 0000000..bdfc177
--- /dev/null
+++ b/src/test/kotlin/ActorTest.kt
@@ -0,0 +1,48 @@
+import io.mockk.confirmVerified
+import io.mockk.impl.annotations.RelaxedMockK
+import io.mockk.verify
+import org.hamcrest.MatcherAssert
+import org.hamcrest.Matchers
+import org.junit.Test
+
+class ActorTest {
+
+ @RelaxedMockK
+ lateinit var mockQuestion: Question
+
+ @RelaxedMockK
+ lateinit var mockAbility: Ability
+
+ @RelaxedMockK
+ lateinit var mockTask: Task
+
+ @Test
+ fun `an actor exists`() {
+ val actor = Actor()
+ MatcherAssert.assertThat(actor, Matchers.`is`(Matchers.not(Matchers.nullValue())))
+ }
+
+ @Test
+ fun `actor has ability`() {
+ val actor = Actor(abilities = mutableListOf(mockAbility))
+ MatcherAssert.assertThat(actor.abilities[0], Matchers.`is`(Matchers.not(Matchers.nullValue())))
+ }
+
+ @Test
+ fun `actor performs tasks`() {
+ val actor = Actor()
+ actor.perform(mockTask)
+ verify(exactly = 1) { mockTask.performAs(actor) }
+ confirmVerified(mockTask)
+ }
+
+ @Test
+ fun `actor asks question`() {
+ val actor = Actor()
+ val answer = actor.asks(mockQuestion)
+
+ MatcherAssert.assertThat(answer, Matchers.not(Matchers.`is`(Matchers.nullValue())))
+ verify(exactly = 1) { mockQuestion.answerAs(actor) }
+ confirmVerified(mockQuestion)
+ }
+}
diff --git a/src/test/kotlin/TaskTest.kt b/src/test/kotlin/TaskTest.kt
new file mode 100644
index 0000000..2a3f017
--- /dev/null
+++ b/src/test/kotlin/TaskTest.kt
@@ -0,0 +1,43 @@
+import io.mockk.impl.annotations.RelaxedMockK
+import io.mockk.impl.annotations.SpyK
+import io.mockk.verify
+import org.junit.Test
+
+class TaskTest {
+
+
+ @RelaxedMockK
+ lateinit var mockAbility: Ability
+
+ @SpyK
+ var task = object : Task {
+ override fun performAs(actor: Actor) {
+ actor.perform(subTask)
+ }
+ }
+
+ @SpyK
+ var subTask = object : Task {
+ override fun performAs(actor: Actor) {
+ actor.perform(interaction)
+ }
+ }
+
+ @SpyK
+ var interaction = object : Interaction {
+ override fun performUsing(ability: Ability) {}
+
+ override fun performAs(actor: Actor) {
+ performUsing(actor.abilities.first())
+ }
+
+ }
+
+ @Test
+ fun `task are performed recursively`() {
+ val actor = Actor(abilities = mutableListOf(mockAbility))
+ actor.perform(task)
+ verify(exactly = 1) { interaction.performUsing(mockAbility) }
+ }
+
+}
diff --git a/src/test/kotlin/com/example/e2e/api/JsonPlaceHolderIT.kt b/src/test/kotlin/com/example/e2e/api/JsonPlaceHolderIT.kt
deleted file mode 100644
index 86965d8..0000000
--- a/src/test/kotlin/com/example/e2e/api/JsonPlaceHolderIT.kt
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.example.e2e.api
-
-import com.example.screenplay.action.GetListOfAllPosts
-import com.example.screenplay.action.UploadNewPost
-import com.example.screenplay.question.NumberOfReturnedPosts
-import net.serenitybdd.junit.runners.SerenityRunner
-import net.serenitybdd.screenplay.Actor
-import net.serenitybdd.screenplay.GivenWhenThen.*
-import net.serenitybdd.screenplay.rest.abilities.CallAnApi
-import net.serenitybdd.screenplay.rest.questions.ResponseConsequence.*
-import net.thucydides.core.annotations.Narrative
-import org.apache.http.HttpStatus
-import org.hamcrest.CoreMatchers
-import org.hamcrest.Matchers.*
-import org.junit.BeforeClass
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(SerenityRunner::class)
-@Narrative(text = ["a simple REST API example"])
-open class JsonPlaceHolderIT {
-
- @Test
- fun `when there are many posts`() {
- author.attemptsTo(GetListOfAllPosts())
- author.should(seeThat(NumberOfReturnedPosts(), greaterThan(99)))
- }
-
- @Test
- fun `when posting`() {
- author.attemptsTo(UploadNewPost.containing("{\"title\":\"foo\",\"body\":\"bar\",\"userId\":1}"))
- author.should(seeThatResponse {
- it.statusCode(HttpStatus.SC_CREATED).body("id", CoreMatchers.`is`(101))
- })
- }
-
- companion object {
- private lateinit var author: Actor
-
- @JvmStatic
- @BeforeClass
- fun setUp() {
- author = Actor("author")
- author.can(CallAnApi.at("https://jsonplaceholder.typicode.com"))
- }
- }
-}
\ No newline at end of file
diff --git a/src/test/kotlin/com/example/e2e/api/package-info.java b/src/test/kotlin/com/example/e2e/api/package-info.java
deleted file mode 100644
index 9c4b648..0000000
--- a/src/test/kotlin/com/example/e2e/api/package-info.java
+++ /dev/null
@@ -1,5 +0,0 @@
-@Narrative(title = "API Checks", text={
- "List of Rest API examples",
-})
-package com.example.e2e.api;
-import net.thucydides.core.annotations.Narrative;
diff --git a/src/test/kotlin/com/example/e2e/browser/CompareScreenshotsIT.kt b/src/test/kotlin/com/example/e2e/browser/CompareScreenshotsIT.kt
deleted file mode 100644
index a854f84..0000000
--- a/src/test/kotlin/com/example/e2e/browser/CompareScreenshotsIT.kt
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.example.e2e.browser
-
-import com.example.screenplay.question.image.NoDifferenceToSnapshot
-import net.serenitybdd.junit.runners.SerenityRunner
-import net.serenitybdd.screenplay.Actor
-import net.serenitybdd.screenplay.GivenWhenThen.*
-import net.serenitybdd.screenplay.abilities.BrowseTheWeb
-import net.serenitybdd.screenplay.actions.Open
-import net.thucydides.core.annotations.Managed
-import org.hamcrest.CoreMatchers.*
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.openqa.selenium.WebDriver
-
-@RunWith(SerenityRunner::class)
-class CompareScreenshotsIT {
-
- @Managed(driver = "chrome")
- private lateinit var aBrowser: WebDriver
-
- /**
- * naive example of a failing screenshot comparison
- * would need to be extended to only screenshot specific elements, see implementation CreateSnapshot
- */
- @Test
- fun `when comparing full size page`() {
- val tester = Actor("tester")
- tester.can(BrowseTheWeb.with(aBrowser))
- tester.attemptsTo(Open.url("https://www.gns.cri.nz/Home/Our-Science/Energy-Futures/Oil-and-Gas/Petroleum-Basin-Explorer"))
- tester.should(seeThat(NoDifferenceToSnapshot("homepage.png"), `is`(true)))
- }
-}
\ No newline at end of file
diff --git a/src/test/kotlin/com/example/e2e/browser/ReportNavigatorIT.kt b/src/test/kotlin/com/example/e2e/browser/ReportNavigatorIT.kt
deleted file mode 100644
index d5ffc0a..0000000
--- a/src/test/kotlin/com/example/e2e/browser/ReportNavigatorIT.kt
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.example.e2e.browser
-
-import com.example.screenplay.action.AccessTheLatestReport
-import com.example.screenplay.action.LookUpAllUnsuccessfulOutcomes
-import com.example.screenplay.question.OutcomesShown
-import net.serenitybdd.junit.runners.SerenityRunner
-import net.serenitybdd.screenplay.Actor
-import net.serenitybdd.screenplay.EventualConsequence.*
-import net.serenitybdd.screenplay.GivenWhenThen.*
-import net.serenitybdd.screenplay.abilities.BrowseTheWeb
-import net.serenitybdd.screenplay.questions.CountQuestion
-import net.thucydides.core.annotations.Managed
-import net.thucydides.core.annotations.Narrative
-import org.hamcrest.CoreMatchers.*
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.openqa.selenium.WebDriver
-
-@RunWith(SerenityRunner::class)
-@Narrative(text = ["describes the report behavior"])
-class ReportNavigatorIT {
-
- @Managed(driver = "chrome")
- private lateinit var aBrowser: WebDriver
-
- @Test
- fun whenTracingErrors() {
- val tester = Actor("tester")
- tester.can(BrowseTheWeb.with(aBrowser))
- tester.attemptsTo(AccessTheLatestReport())
- tester.attemptsTo(LookUpAllUnsuccessfulOutcomes())
- tester.should(eventually(seeThat(CountQuestion(OutcomesShown()), `is`(9))))
- }
-}
\ No newline at end of file
diff --git a/src/test/kotlin/com/example/e2e/browser/package-info.java b/src/test/kotlin/com/example/e2e/browser/package-info.java
deleted file mode 100644
index 8e1ddd4..0000000
--- a/src/test/kotlin/com/example/e2e/browser/package-info.java
+++ /dev/null
@@ -1,6 +0,0 @@
-@Narrative(title = "Living Documentation", text={
- "Produced by testers and for testers, a test report naturally has a very strong testing focus. The emphasis is primarily on knowing whether a test passes or fails, and, at a higher level, knowing what proportion of tests pass or fail.",
- "Living Documentation is more like a very detailed illustrated user manual. The focus is about describing what the application does, in business terms."
-})
-package com.example.e2e.browser;
-import net.thucydides.core.annotations.Narrative;
diff --git a/src/test/kotlin/com/example/screenplay/action/AccessTheLatestReport.kt b/src/test/kotlin/com/example/screenplay/action/AccessTheLatestReport.kt
deleted file mode 100644
index b7cd181..0000000
--- a/src/test/kotlin/com/example/screenplay/action/AccessTheLatestReport.kt
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.example.screenplay.action
-
-import com.example.screenplay.page.NavigatorDemo
-import net.serenitybdd.screenplay.Actor
-import net.serenitybdd.screenplay.GivenWhenThen.*
-import net.serenitybdd.screenplay.Performable
-import net.serenitybdd.screenplay.actions.Open
-import net.serenitybdd.screenplay.matchers.WebElementStateMatchers.*
-import net.serenitybdd.screenplay.questions.WebElementQuestion.*
-
-open class AccessTheLatestReport : Performable {
- override fun performAs(actor: T) {
- actor.attemptsTo(Open.browserOn(NavigatorDemo()))
- actor.should(seeThat(the(NavigatorDemo.shareCurrentView), isVisible()))
- }
-}
\ No newline at end of file
diff --git a/src/test/kotlin/com/example/screenplay/action/GetListOfAllPosts.kt b/src/test/kotlin/com/example/screenplay/action/GetListOfAllPosts.kt
deleted file mode 100644
index af75273..0000000
--- a/src/test/kotlin/com/example/screenplay/action/GetListOfAllPosts.kt
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.example.screenplay.action
-
-import net.serenitybdd.screenplay.Actor
-import net.serenitybdd.screenplay.Performable
-import net.serenitybdd.screenplay.rest.interactions.Get
-
-open class GetListOfAllPosts : Performable {
- override fun performAs(actor: T) {
- actor.attemptsTo(Get.resource("/posts"))
- }
-}
\ No newline at end of file
diff --git a/src/test/kotlin/com/example/screenplay/action/LookUpAllUnsuccessfulOutcomes.kt b/src/test/kotlin/com/example/screenplay/action/LookUpAllUnsuccessfulOutcomes.kt
deleted file mode 100644
index 2327dde..0000000
--- a/src/test/kotlin/com/example/screenplay/action/LookUpAllUnsuccessfulOutcomes.kt
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.example.screenplay.action
-
-import net.serenitybdd.screenplay.Actor
-import net.serenitybdd.screenplay.Performable
-import net.serenitybdd.screenplay.actions.Click
-
-open class LookUpAllUnsuccessfulOutcomes : Performable {
- override fun performAs(actor: T) {
- actor.attemptsTo(Click.on(".ToggleSideMenu"))
- actor.attemptsTo(Click.on(".traceErrors"))
- }
-}
\ No newline at end of file
diff --git a/src/test/kotlin/com/example/screenplay/action/UploadNewPost.kt b/src/test/kotlin/com/example/screenplay/action/UploadNewPost.kt
deleted file mode 100644
index 4df7a37..0000000
--- a/src/test/kotlin/com/example/screenplay/action/UploadNewPost.kt
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.example.screenplay.action
-
-import net.serenitybdd.screenplay.Actor
-import net.serenitybdd.screenplay.Performable
-import net.serenitybdd.screenplay.Tasks.*
-import net.serenitybdd.screenplay.rest.interactions.Post
-import net.thucydides.core.annotations.Step
-
-open class UploadNewPost(private val jsonBody: String) : Performable {
-
- @Step("{0} uploads new post containing #jsonBody")
- override fun performAs(actor: T) {
- actor.attemptsTo(Post.to("/posts").with {
- it.header("Content-type", "application/json; charset=UTF-8").body(jsonBody)
- })
- }
-
- companion object {
- fun containing(jsonBody: String): UploadNewPost {
- return instrumented(UploadNewPost::class.java, jsonBody)
- }
- }
-}
\ No newline at end of file
diff --git a/src/test/kotlin/com/example/screenplay/action/image/CreateSnapshot.kt b/src/test/kotlin/com/example/screenplay/action/image/CreateSnapshot.kt
deleted file mode 100644
index 5aad40c..0000000
--- a/src/test/kotlin/com/example/screenplay/action/image/CreateSnapshot.kt
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.example.screenplay.action.image
-
-import net.serenitybdd.screenplay.Actor
-import net.serenitybdd.screenplay.Performable
-import net.serenitybdd.screenplay.abilities.BrowseTheWeb
-import org.openqa.selenium.By
-import ru.yandex.qatools.ashot.AShot
-import java.nio.file.Path
-import javax.imageio.ImageIO
-
-class CreateSnapshot(private val snapshotFile: String) : Performable {
- override fun performAs(actor: T) {
- val driver = BrowseTheWeb.`as`(actor).driver
- val screenShot = AShot().takeScreenshot(driver, driver.findElement(By.cssSelector("body")))
- val snapshotPath = Path.of(this::class.java.getResource(".").toURI()).resolve("snapshots")
- snapshotPath.toFile().mkdirs()
- ImageIO.write(screenShot.image, "png", snapshotPath.resolve(snapshotFile).toFile())
- }
-}
diff --git a/src/test/kotlin/com/example/screenplay/action/image/ImageDifference.kt b/src/test/kotlin/com/example/screenplay/action/image/ImageDifference.kt
deleted file mode 100644
index 3024382..0000000
--- a/src/test/kotlin/com/example/screenplay/action/image/ImageDifference.kt
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.example.screenplay.action.image
-
-import com.example.screenplay.question.QuestionWithDefaultSubject
-import com.example.screenplay.question.image.WeWantToCreateSnapshots
-import net.serenitybdd.screenplay.Actor
-import net.serenitybdd.screenplay.abilities.BrowseTheWeb
-import net.serenitybdd.screenplay.conditions.Check
-import org.openqa.selenium.By
-import ru.yandex.qatools.ashot.AShot
-import ru.yandex.qatools.ashot.comparison.ImageDiff
-import ru.yandex.qatools.ashot.comparison.ImageDiffer
-import java.awt.image.BufferedImage
-import java.nio.file.Path
-import javax.imageio.IIOException
-import javax.imageio.ImageIO
-
-
-open class ImageDifference(private val snapshotFile: String?) : QuestionWithDefaultSubject() {
-
-
- override fun answeredBy(actor: Actor): ImageDiff {
- actor.attemptsTo(Check.whether(WeWantToCreateSnapshots()).andIfSo(CreateSnapshot(snapshotFile!!)))
- val expectedImage: BufferedImage = try {
- ImageIO.read(Path.of(this::class.java.getResource(".").toURI()).resolve("snapshots").resolve(snapshotFile).toFile())
- } catch (e: IIOException) {
- throw RuntimeException(e)
- }
- val driver = BrowseTheWeb.`as`(actor).driver
- val screenShot = AShot().takeScreenshot(driver, driver.findElement(By.cssSelector("body"))).image
- val imgdiffer = ImageDiffer()
- val imgdiff = imgdiffer.makeDiff(expectedImage, screenShot)
- return imgdiff
- }
-
- companion object {
- fun with(snapshot: String): ImageDifference = ImageDifference(snapshot)
-
- }
-
-}
-
diff --git a/src/test/kotlin/com/example/screenplay/page/NavigatorDemo.kt b/src/test/kotlin/com/example/screenplay/page/NavigatorDemo.kt
deleted file mode 100644
index 7eb90c4..0000000
--- a/src/test/kotlin/com/example/screenplay/page/NavigatorDemo.kt
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.example.screenplay.page
-
-import net.serenitybdd.core.pages.PageObject
-import net.serenitybdd.screenplay.targets.Target
-import net.serenitybdd.screenplay.targets.Target.*
-import net.thucydides.core.annotations.DefaultUrl
-
-@DefaultUrl("https://lemon-desert-049177e03.azurestaticapps.net/")
-class NavigatorDemo : PageObject() {
- companion object {
- val shareCurrentView: Target = the("share current view").locatedBy(".MuiFab-label")
- }
-}
\ No newline at end of file
diff --git a/src/test/kotlin/com/example/screenplay/question/NumberOfReturnedPosts.kt b/src/test/kotlin/com/example/screenplay/question/NumberOfReturnedPosts.kt
deleted file mode 100644
index 2b73617..0000000
--- a/src/test/kotlin/com/example/screenplay/question/NumberOfReturnedPosts.kt
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.example.screenplay.question
-
-import net.serenitybdd.screenplay.Actor
-import net.serenitybdd.screenplay.rest.questions.LastResponse
-
-class NumberOfReturnedPosts : QuestionWithDefaultSubject() {
- override fun answeredBy(actor: Actor): Int {
- return actor.asksFor(LastResponse()).jsonPath().getList("").size
- }
-}
\ No newline at end of file
diff --git a/src/test/kotlin/com/example/screenplay/question/OutcomesShown.kt b/src/test/kotlin/com/example/screenplay/question/OutcomesShown.kt
deleted file mode 100644
index f0f04ea..0000000
--- a/src/test/kotlin/com/example/screenplay/question/OutcomesShown.kt
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.example.screenplay.question
-
-import net.serenitybdd.core.pages.WebElementFacade
-import net.serenitybdd.screenplay.Actor
-import net.serenitybdd.screenplay.targets.Target
-
-class OutcomesShown : QuestionWithDefaultSubject>() {
- override fun answeredBy(actor: Actor): List {
- return Target.the("outcomes that can be selected").locatedBy(".selectOutcome").resolveAllFor(actor)
- }
-}
\ No newline at end of file
diff --git a/src/test/kotlin/com/example/screenplay/question/QuestionWithDefaultSubject.kt b/src/test/kotlin/com/example/screenplay/question/QuestionWithDefaultSubject.kt
deleted file mode 100644
index 5c9504f..0000000
--- a/src/test/kotlin/com/example/screenplay/question/QuestionWithDefaultSubject.kt
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.example.screenplay.question
-
-import net.serenitybdd.screenplay.Question
-
-abstract class QuestionWithDefaultSubject : Question {
- override fun getSubject(): String {
- return this::class.simpleName!!.replace("([a-z])([A-Z])".toRegex(), "$1 $2")
- }
-
- override fun toString(): String {
- return subject
- }
-}
\ No newline at end of file
diff --git a/src/test/kotlin/com/example/screenplay/question/image/NoDifferenceToSnapshot.kt b/src/test/kotlin/com/example/screenplay/question/image/NoDifferenceToSnapshot.kt
deleted file mode 100644
index f51b1c7..0000000
--- a/src/test/kotlin/com/example/screenplay/question/image/NoDifferenceToSnapshot.kt
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.example.screenplay.question.image
-
-import com.example.screenplay.action.image.ImageDifference
-import com.example.screenplay.question.QuestionWithDefaultSubject
-import net.serenitybdd.core.Serenity
-import net.serenitybdd.screenplay.Actor
-import java.nio.file.Path
-import javax.imageio.IIOException
-import javax.imageio.ImageIO
-
-class NoDifferenceToSnapshot(private val snapshot: String) : QuestionWithDefaultSubject() {
- override fun answeredBy(actor: Actor): Boolean {
- val diff = actor.asksFor(ImageDifference.with(snapshot))
- val hasDiff = diff.hasDiff()
- if (hasDiff) {
- val snapshotPath = Path.of(this::class.java.getResource(".").toURI()).resolve("diffs")
- snapshotPath.toFile().mkdirs()
- try {
- val diffPath = snapshotPath.resolve(snapshot + "-diff.png")
- ImageIO.write(diff.markedImage, "png", diffPath.toFile())
- Serenity.recordReportData().withTitle("Image diff").downloadable().fromFile(diffPath)
- } catch (e: IIOException) {
- throw RuntimeException(e)
- }
- }
- return !hasDiff
- }
-
-}
diff --git a/src/test/kotlin/com/example/screenplay/question/image/WeWantToCreateSnapshots.kt b/src/test/kotlin/com/example/screenplay/question/image/WeWantToCreateSnapshots.kt
deleted file mode 100644
index 34d6078..0000000
--- a/src/test/kotlin/com/example/screenplay/question/image/WeWantToCreateSnapshots.kt
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.example.screenplay.question.image
-
-import com.example.screenplay.question.QuestionWithDefaultSubject
-import net.serenitybdd.screenplay.Actor
-import net.thucydides.core.util.SystemEnvironmentVariables
-
-class WeWantToCreateSnapshots : QuestionWithDefaultSubject() {
-
- override fun answeredBy(actor: Actor): Boolean {
- return SystemEnvironmentVariables.createEnvironmentVariables().getPropertyAsBoolean("ashot.image.comparison.create.snapshots", false)
- }
-
-}