PageObject TourPage Object Pattern This tour will show you how to use the PageObject library to...
Transcript of PageObject TourPage Object Pattern This tour will show you how to use the PageObject library to...
![Page 1: PageObject TourPage Object Pattern This tour will show you how to use the PageObject library to write tests using the Page Object Pattern in ScalaTest. PageObject / PageModule A PageObject](https://reader035.fdocuments.net/reader035/viewer/2022071022/5fd6282905c8f361036924e5/html5/thumbnails/1.jpg)
PageObject Tour
Using the Page Object Pattern in ScalaTest
![Page 2: PageObject TourPage Object Pattern This tour will show you how to use the PageObject library to write tests using the Page Object Pattern in ScalaTest. PageObject / PageModule A PageObject](https://reader035.fdocuments.net/reader035/viewer/2022071022/5fd6282905c8f361036924e5/html5/thumbnails/2.jpg)
Page Object Pattern
This tour will show you how to use the PageObject library to write tests using the Page Object Pattern in ScalaTest.
![Page 3: PageObject TourPage Object Pattern This tour will show you how to use the PageObject library to write tests using the Page Object Pattern in ScalaTest. PageObject / PageModule A PageObject](https://reader035.fdocuments.net/reader035/viewer/2022071022/5fd6282905c8f361036924e5/html5/thumbnails/3.jpg)
How to definePage Objects?
PageObject / PageModule
![Page 4: PageObject TourPage Object Pattern This tour will show you how to use the PageObject library to write tests using the Page Object Pattern in ScalaTest. PageObject / PageModule A PageObject](https://reader035.fdocuments.net/reader035/viewer/2022071022/5fd6282905c8f361036924e5/html5/thumbnails/4.jpg)
PageObject / PageModuleA PageObject represents a “Page”
It has...
● PageModules like “content”, “header”, “footer” or “navigation” to access the content of the page.
● an atChecker()(trait AtChecker) to see if the browser is currently on this page.
● no DOM access!
A PageModule represents an area of the Page that represents one logical unit.
It...
● can access the DOM using BrowserPageDsl.
● Should shield the DOM from other parts of the test.
● can contain other PageModules if needed.
![Page 5: PageObject TourPage Object Pattern This tour will show you how to use the PageObject library to write tests using the Page Object Pattern in ScalaTest. PageObject / PageModule A PageObject](https://reader035.fdocuments.net/reader035/viewer/2022071022/5fd6282905c8f361036924e5/html5/thumbnails/5.jpg)
Example PageObject: GoogleSearchHomePage
Now we are going and try to test Google’s search homepage.
First we will define a PageObject, later we write a test.
As we can expect, we need a function to search for something:
def search(searchTerm: String): Unit
We define it inside of an PageModule because search need to access the DOM.
![Page 6: PageObject TourPage Object Pattern This tour will show you how to use the PageObject library to write tests using the Page Object Pattern in ScalaTest. PageObject / PageModule A PageObject](https://reader035.fdocuments.net/reader035/viewer/2022071022/5fd6282905c8f361036924e5/html5/thumbnails/6.jpg)
Example PageObject: GoogleSearchHomePage
case class GoogleSearchHomePage()
We use a case class to be able to write GoogleSearchHomePage() without the new Keyword.
![Page 7: PageObject TourPage Object Pattern This tour will show you how to use the PageObject library to write tests using the Page Object Pattern in ScalaTest. PageObject / PageModule A PageObject](https://reader035.fdocuments.net/reader035/viewer/2022071022/5fd6282905c8f361036924e5/html5/thumbnails/7.jpg)
Example PageObject: GoogleSearchHomePage
case class GoogleSearchHomePage() extends PageObject
Because we want to implement a Page Object,we need to implement the trait PageObject.
![Page 8: PageObject TourPage Object Pattern This tour will show you how to use the PageObject library to write tests using the Page Object Pattern in ScalaTest. PageObject / PageModule A PageObject](https://reader035.fdocuments.net/reader035/viewer/2022071022/5fd6282905c8f361036924e5/html5/thumbnails/8.jpg)
Example PageObject: GoogleSearchHomePage
case class GoogleSearchHomePage() extends PageObject {
override def atChecker(): Boolean = pageTitle == "Google"}
This is now a valid PageObject,only the atChecker() is required.
![Page 9: PageObject TourPage Object Pattern This tour will show you how to use the PageObject library to write tests using the Page Object Pattern in ScalaTest. PageObject / PageModule A PageObject](https://reader035.fdocuments.net/reader035/viewer/2022071022/5fd6282905c8f361036924e5/html5/thumbnails/9.jpg)
Example PageObject: GoogleSearchHomePage
case class GoogleSearchHomePage() extends PageObject {
override def atChecker(): Boolean = pageTitle == "Google"}
We just compare the pageTitle to see if the Browser is at the Page we expect.
![Page 10: PageObject TourPage Object Pattern This tour will show you how to use the PageObject library to write tests using the Page Object Pattern in ScalaTest. PageObject / PageModule A PageObject](https://reader035.fdocuments.net/reader035/viewer/2022071022/5fd6282905c8f361036924e5/html5/thumbnails/10.jpg)
Example PageObject: GoogleSearchHomePage
case class GoogleSearchHomePage() extends PageObject {
override def atChecker(): Boolean = pageTitle == "Google"}
But this PageObject is uselessbecause we can’t do anything with it...
![Page 11: PageObject TourPage Object Pattern This tour will show you how to use the PageObject library to write tests using the Page Object Pattern in ScalaTest. PageObject / PageModule A PageObject](https://reader035.fdocuments.net/reader035/viewer/2022071022/5fd6282905c8f361036924e5/html5/thumbnails/11.jpg)
Example PageObject: GoogleSearchHomePage
case class GoogleSearchHomePage() extends PageObject {
object content {
}
override def atChecker(): Boolean = pageTitle == "Google"}
Because of this we add some content.
![Page 12: PageObject TourPage Object Pattern This tour will show you how to use the PageObject library to write tests using the Page Object Pattern in ScalaTest. PageObject / PageModule A PageObject](https://reader035.fdocuments.net/reader035/viewer/2022071022/5fd6282905c8f361036924e5/html5/thumbnails/12.jpg)
Example PageObject: GoogleSearchHomePage
case class GoogleSearchHomePage() extends PageObject {
object content extends PageModule {
}
override def atChecker(): Boolean = pageTitle == "Google"}
A PageModule is required to access the DOM.
![Page 13: PageObject TourPage Object Pattern This tour will show you how to use the PageObject library to write tests using the Page Object Pattern in ScalaTest. PageObject / PageModule A PageObject](https://reader035.fdocuments.net/reader035/viewer/2022071022/5fd6282905c8f361036924e5/html5/thumbnails/13.jpg)
Example PageObject: GoogleSearchHomePage
case class GoogleSearchHomePage() extends PageObject {
object content extends PageModule { private val q = textField(name("q"))
}
override def atChecker(): Boolean = pageTitle == "Google"}
The search box on Google’s Homepagehas the attribute name=”q”
![Page 14: PageObject TourPage Object Pattern This tour will show you how to use the PageObject library to write tests using the Page Object Pattern in ScalaTest. PageObject / PageModule A PageObject](https://reader035.fdocuments.net/reader035/viewer/2022071022/5fd6282905c8f361036924e5/html5/thumbnails/14.jpg)
Example PageObject: GoogleSearchHomePage
case class GoogleSearchHomePage() extends PageObject {
object content extends PageModule { private val q = textField(name("q"))
}
override def atChecker(): Boolean = pageTitle == "Google"}
And we expect an Element of type TextField.
![Page 15: PageObject TourPage Object Pattern This tour will show you how to use the PageObject library to write tests using the Page Object Pattern in ScalaTest. PageObject / PageModule A PageObject](https://reader035.fdocuments.net/reader035/viewer/2022071022/5fd6282905c8f361036924e5/html5/thumbnails/15.jpg)
Example PageObject: GoogleSearchHomePage
case class GoogleSearchHomePage() extends PageObject {
object content extends PageModule { private val q = textField(name("q"))
}
override def atChecker(): Boolean = pageTitle == "Google"}
We don’t want to expose this DOM stuff...
![Page 16: PageObject TourPage Object Pattern This tour will show you how to use the PageObject library to write tests using the Page Object Pattern in ScalaTest. PageObject / PageModule A PageObject](https://reader035.fdocuments.net/reader035/viewer/2022071022/5fd6282905c8f361036924e5/html5/thumbnails/16.jpg)
Example PageObject: GoogleSearchHomePage
case class GoogleSearchHomePage() extends PageObject {
object content extends PageModule { private val q = textField(name("q"))
}
override def atChecker(): Boolean = pageTitle == "Google"}
...because the PageModule should shieldall PageObject clients from DOM details.
![Page 17: PageObject TourPage Object Pattern This tour will show you how to use the PageObject library to write tests using the Page Object Pattern in ScalaTest. PageObject / PageModule A PageObject](https://reader035.fdocuments.net/reader035/viewer/2022071022/5fd6282905c8f361036924e5/html5/thumbnails/17.jpg)
Example PageObject: GoogleSearchHomePage
case class GoogleSearchHomePage() extends PageObject {
object content extends PageModule { private val q = textField(name("q"))
def search(searchTerm: String): Unit = {
} }
override def atChecker(): Boolean = pageTitle == "Google"}
As a last step we provide a “public API“ to allow the clients of this PageObject to search for something.
![Page 18: PageObject TourPage Object Pattern This tour will show you how to use the PageObject library to write tests using the Page Object Pattern in ScalaTest. PageObject / PageModule A PageObject](https://reader035.fdocuments.net/reader035/viewer/2022071022/5fd6282905c8f361036924e5/html5/thumbnails/18.jpg)
Example PageObject: GoogleSearchHomePage
case class GoogleSearchHomePage() extends PageObject {
object content extends PageModule { private val q = textField(name("q"))
def search(searchTerm: String): Unit = { q.value = searchTerm submit() } }
override def atChecker(): Boolean = pageTitle == "Google"}
We fill the search term into the q Element.
![Page 19: PageObject TourPage Object Pattern This tour will show you how to use the PageObject library to write tests using the Page Object Pattern in ScalaTest. PageObject / PageModule A PageObject](https://reader035.fdocuments.net/reader035/viewer/2022071022/5fd6282905c8f361036924e5/html5/thumbnails/19.jpg)
Example PageObject: GoogleSearchHomePage
case class GoogleSearchHomePage() extends PageObject {
object content extends PageModule { private val q = textField(name("q"))
def search(searchTerm: String): Unit = { q.value = searchTerm submit() } }
override def atChecker(): Boolean = pageTitle == "Google"}
And finally we submit() the search form.
![Page 20: PageObject TourPage Object Pattern This tour will show you how to use the PageObject library to write tests using the Page Object Pattern in ScalaTest. PageObject / PageModule A PageObject](https://reader035.fdocuments.net/reader035/viewer/2022071022/5fd6282905c8f361036924e5/html5/thumbnails/20.jpg)
Example PageObject: GoogleSearchHomePage
case class GoogleSearchHomePage() extends PageObject with UrlPage { val url = "https://www.google.com/"
object content extends PageModule { private val q = textField(name("q"))
def search(searchTerm: String): Unit = { q.value = searchTerm submit() } }
override def atChecker(): Boolean = pageTitle == "Google"}
Because we want to navigate to this page,we also have to provide the URL.
![Page 21: PageObject TourPage Object Pattern This tour will show you how to use the PageObject library to write tests using the Page Object Pattern in ScalaTest. PageObject / PageModule A PageObject](https://reader035.fdocuments.net/reader035/viewer/2022071022/5fd6282905c8f361036924e5/html5/thumbnails/21.jpg)
Example PageObject: GoogleSearchHomePage
case class GoogleSearchHomePage() extends PageObject with UrlPage { val url = "https://www.google.com/"
object content extends PageModule { private val q = textField(name("q"))
def search(searchTerm: String): Unit = { q.value = searchTerm submit() } }
override def atChecker(): Boolean = pageTitle == "Google"}
![Page 22: PageObject TourPage Object Pattern This tour will show you how to use the PageObject library to write tests using the Page Object Pattern in ScalaTest. PageObject / PageModule A PageObject](https://reader035.fdocuments.net/reader035/viewer/2022071022/5fd6282905c8f361036924e5/html5/thumbnails/22.jpg)
How to write a Test Spec?
GoogleSearchSpec example using ScalaTest
![Page 23: PageObject TourPage Object Pattern This tour will show you how to use the PageObject library to write tests using the Page Object Pattern in ScalaTest. PageObject / PageModule A PageObject](https://reader035.fdocuments.net/reader035/viewer/2022071022/5fd6282905c8f361036924e5/html5/thumbnails/23.jpg)
GoogleSearchSpec example using ScalaTest
For this example we want to test the Google Search Homepage.
After the search was submitted we expect the corresponding result page:
● Given
○ The Google Search Homepage
● When
○ Searching for “Cheese!”
● Then
○ We are at the Google Search Result Page
![Page 24: PageObject TourPage Object Pattern This tour will show you how to use the PageObject library to write tests using the Page Object Pattern in ScalaTest. PageObject / PageModule A PageObject](https://reader035.fdocuments.net/reader035/viewer/2022071022/5fd6282905c8f361036924e5/html5/thumbnails/24.jpg)
GoogleSearchSpec example using ScalaTest
class GoogleSearchSpec extends FunSpec {
describe("Google Search") { it("should change its title based on the term searched") {
} }}
Initial we write a plain ScalaTest TestSpec.
![Page 25: PageObject TourPage Object Pattern This tour will show you how to use the PageObject library to write tests using the Page Object Pattern in ScalaTest. PageObject / PageModule A PageObject](https://reader035.fdocuments.net/reader035/viewer/2022071022/5fd6282905c8f361036924e5/html5/thumbnails/25.jpg)
GoogleSearchSpec example using ScalaTest
class GoogleSearchSpec extends FunSpec {
describe("Google Search") { it("should change its title based on the term searched") {
} }}
You can also use any other testing stylesupported by ScalaTest.
![Page 26: PageObject TourPage Object Pattern This tour will show you how to use the PageObject library to write tests using the Page Object Pattern in ScalaTest. PageObject / PageModule A PageObject](https://reader035.fdocuments.net/reader035/viewer/2022071022/5fd6282905c8f361036924e5/html5/thumbnails/26.jpg)
GoogleSearchSpec example using ScalaTest
class GoogleSearchSpec extends FunSpec with GivenWhenThen {
describe("Google Search") { it("should change its title based on the term searched") { Given("The Google Search Homepage")
When("Searching for “Cheese!”")
Then("We are at the Google Search Result Page")
} }} Optionally you can use GivenWhenThen.
![Page 27: PageObject TourPage Object Pattern This tour will show you how to use the PageObject library to write tests using the Page Object Pattern in ScalaTest. PageObject / PageModule A PageObject](https://reader035.fdocuments.net/reader035/viewer/2022071022/5fd6282905c8f361036924e5/html5/thumbnails/27.jpg)
GoogleSearchSpec example using ScalaTest
class GoogleSearchSpec extends FunSpec with GivenWhenThen with PageObjectSuite { describe("Google Search") { it("should change its title based on the term searched") { Given("The Google Search Homepage")
When("Searching for “Cheese!”")
Then("We are at the Google Search Result Page")
} }}
Because we want to test a web pagethe TestSpec needs to launch a Web Browser…
The PageObject library will do this for you!
![Page 28: PageObject TourPage Object Pattern This tour will show you how to use the PageObject library to write tests using the Page Object Pattern in ScalaTest. PageObject / PageModule A PageObject](https://reader035.fdocuments.net/reader035/viewer/2022071022/5fd6282905c8f361036924e5/html5/thumbnails/28.jpg)
GoogleSearchSpec example using ScalaTest
class GoogleSearchSpec extends FunSpec with GivenWhenThen with PageObjectSuite { describe("Google Search") { it("should change its title based on the term searched") { Given("The Google Search Homepage") val page = to(GoogleSearchHomePage()) When("Searching for “Cheese!”")
Then("We are at the Google Search Result Page")
} }}
Navigate the Browser to the given Pagerepresented by a PageObject.
![Page 29: PageObject TourPage Object Pattern This tour will show you how to use the PageObject library to write tests using the Page Object Pattern in ScalaTest. PageObject / PageModule A PageObject](https://reader035.fdocuments.net/reader035/viewer/2022071022/5fd6282905c8f361036924e5/html5/thumbnails/29.jpg)
class GoogleSearchSpec extends FunSpec with GivenWhenThen with PageObjectSuite { describe("Google Search") { it("should change its title based on the term searched") { Given("The Google Search Homepage") val page = to(GoogleSearchHomePage())
When("Searching for “Cheese!”") page.content.search("Cheese!")
Then("We are at the Google Search Result Page")
} }}
GoogleSearchSpec example using ScalaTest
Search for “Cheese!”
![Page 30: PageObject TourPage Object Pattern This tour will show you how to use the PageObject library to write tests using the Page Object Pattern in ScalaTest. PageObject / PageModule A PageObject](https://reader035.fdocuments.net/reader035/viewer/2022071022/5fd6282905c8f361036924e5/html5/thumbnails/30.jpg)
GoogleSearchSpec example using ScalaTest
class GoogleSearchSpec extends FunSpec with GivenWhenThen with PageObjectSuite { describe("Google Search") { it("should change its title based on the term searched") { Given("The Google Search Homepage") val page = to(GoogleSearchHomePage())
When("Searching for “Cheese!”") page.content.search("Cheese!")
Then("We are at the Google Search Result Page") at(GoogleSearchResultPage("Cheese!")) } }}
And finally check that we are on the desired page...
![Page 31: PageObject TourPage Object Pattern This tour will show you how to use the PageObject library to write tests using the Page Object Pattern in ScalaTest. PageObject / PageModule A PageObject](https://reader035.fdocuments.net/reader035/viewer/2022071022/5fd6282905c8f361036924e5/html5/thumbnails/31.jpg)
GoogleSearchSpec example using ScalaTest
class GoogleSearchSpec extends FunSpec with GivenWhenThen with PageObjectSuite { describe("Google Search") { it("should change its title based on the term searched") { Given("The Google Search Homepage") val page = to(GoogleSearchHomePage())
When("Searching for “Cheese!”") page.content.search("Cheese!")
Then("We are at the Google Search Result Page") at(GoogleSearchResultPage("Cheese!")) } }}
![Page 32: PageObject TourPage Object Pattern This tour will show you how to use the PageObject library to write tests using the Page Object Pattern in ScalaTest. PageObject / PageModule A PageObject](https://reader035.fdocuments.net/reader035/viewer/2022071022/5fd6282905c8f361036924e5/html5/thumbnails/32.jpg)
Example Page Object: GoogleSearchResultPage
case class GoogleSearchResultPage(searchTerm: String) extends PageObject { override def atChecker(): Boolean = { pageTitle.startsWith(s"$searchTerm - Google") }}
We do not want to withhold the GoogleSearchResultPage...
![Page 33: PageObject TourPage Object Pattern This tour will show you how to use the PageObject library to write tests using the Page Object Pattern in ScalaTest. PageObject / PageModule A PageObject](https://reader035.fdocuments.net/reader035/viewer/2022071022/5fd6282905c8f361036924e5/html5/thumbnails/33.jpg)
![Page 34: PageObject TourPage Object Pattern This tour will show you how to use the PageObject library to write tests using the Page Object Pattern in ScalaTest. PageObject / PageModule A PageObject](https://reader035.fdocuments.net/reader035/viewer/2022071022/5fd6282905c8f361036924e5/html5/thumbnails/34.jpg)
Colors Used
Links
Comments
Types
Keywords
"Strings"
Functions
Variables (val, var and object)