Skip to content

Commit

Permalink
Merge pull request #46 from novoda/page-object-chaining
Browse files Browse the repository at this point in the history
Add user flows to test automation starter
  • Loading branch information
thywen committed Sep 28, 2018
2 parents f181d61 + 282dc09 commit a17dbf2
Show file tree
Hide file tree
Showing 8 changed files with 94 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,20 @@ import android.support.test.espresso.matcher.ViewMatchers.withId
import com.novoda.androidstoreexample.R
import com.novoda.androidstoreexample.ViewMatchers

fun mainPage(func: MainActivityPageObject.() -> Unit) = MainActivityPageObject().apply(func)

class MainActivityPageObject {

private val TITLE = onView(withId(R.id.titleTextView))
private val CATEGORY_LIST = onView(withId(R.id.categoryListView))

fun verifyTitle() {
fun verifyTitle() = apply {
TITLE.check(matches(isDisplayed()))
}

fun navigateToProductList() {
val categoryMatcher = ViewMatchers.withCategoryTitle("HATS")
fun navigateToProductList(category: String) = apply {
val categoryMatcher = ViewMatchers.withCategoryTitle(category)

onView(withId(R.id.categoryListView))
.perform(actionOnHolderItem(categoryMatcher, click()))
CATEGORY_LIST.perform(actionOnHolderItem(categoryMatcher, click()))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,13 @@ import android.support.test.espresso.matcher.ViewMatchers.isDisplayed
import android.support.test.espresso.matcher.ViewMatchers.withId
import com.novoda.androidstoreexample.R

fun productDetailsPage(func: ProductDetailsPageObject.() -> Unit) = ProductDetailsPageObject().apply(func)

class ProductDetailsPageObject {

fun assertProductDetailsDisplayed() {
onView(withId(R.id.productDetailDescription)).check(matches(isDisplayed()))
private val PRODUCT_DESCRIPTION = onView(withId(R.id.productDetailDescription))

fun assertProductDetailsDisplayed() = apply {
PRODUCT_DESCRIPTION.check(matches(isDisplayed()))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,17 @@ import android.support.test.espresso.matcher.ViewMatchers.withId
import com.novoda.androidstoreexample.R
import com.novoda.androidstoreexample.ViewMatchers

fun productList(func: ProductListPageObject.() -> Unit) {
ProductListPageObject().apply(func)
}

class ProductListPageObject {

fun navigateToProductDetails() {
val productMatcher = ViewMatchers.withProductTitle("hat white")
private val PRODUCT_LIST = onView(withId(R.id.productListView))

fun navigateToProductDetails(product: String) = apply {
val productMatcher = ViewMatchers.withProductTitle(product)

onView(withId(R.id.productListView)).perform(RecyclerViewActions.actionOnHolderItem(productMatcher, ViewActions.click()))
PRODUCT_LIST.perform(RecyclerViewActions.actionOnHolderItem(productMatcher, ViewActions.click()))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,13 @@
import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
import static android.support.test.espresso.matcher.ViewMatchers.withId;

public class EspressoJavaTestExample {
public class EspressoJavaTestExampleWithoutFramework {

@Rule
public ActivityTestRule<MainActivity> activityTestRule = new ActivityTestRule<MainActivity>(MainActivity.class);

@Test
public void firstNavigationTest() {
public void firstNavigationTestWithoutFramework() {
Matcher<RecyclerView.ViewHolder> categoryMatcher = ViewMatchers.withCategoryTitle("HATS");

onView(android.support.test.espresso.matcher.ViewMatchers.withId(R.id.categoryListView)).perform(scrollToHolder(categoryMatcher), actionOnHolderItem(categoryMatcher, click()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import org.junit.Rule
import org.junit.Test
import java.io.InputStream

class MockServerTestExample {
class EspressoTestExampleWithMockServer {

private val activityTestRule = ActivityTestRule<MainActivity>(MainActivity::class.java, false, false)
private val mockWebServer = MockWebServer()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.novoda.androidstoreexample.tests

import android.support.test.rule.ActivityTestRule
import com.novoda.androidstoreexample.activities.MainActivity
import com.novoda.androidstoreexample.pageobjects.*
import org.junit.Rule
import org.junit.Test

class EspressoTestExampleWithPageObjects {

private val activityTestRule = ActivityTestRule<MainActivity>(MainActivity::class.java)

@get:Rule
var activityRule: ActivityTestRule<MainActivity> = activityTestRule

@Test
fun firstNavigationTestWithPageObjects() {

mainPage {
navigateToProductList("HATS")
}

productList {
navigateToProductDetails("hat white")
}

productDetailsPage {
assertProductDetailsDisplayed()
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,27 +5,25 @@ import com.novoda.androidstoreexample.activities.MainActivity
import com.novoda.androidstoreexample.pageobjects.MainActivityPageObject
import com.novoda.androidstoreexample.pageobjects.ProductDetailsPageObject
import com.novoda.androidstoreexample.pageobjects.ProductListPageObject
import com.novoda.androidstoreexample.userflows.productUserFlow
import org.junit.Rule
import org.junit.Test

class EspressoUserFlowTests {

private val mainActivityPageObject = MainActivityPageObject()
private val productListPageObject = ProductListPageObject()
private val productDetailsPageObject = ProductDetailsPageObject()

class EspressoTestExampleWithUserFlows {
private val activityTestRule = ActivityTestRule<MainActivity>(MainActivity::class.java)

@get:Rule
var activityRule: ActivityTestRule<MainActivity> = activityTestRule

@Test
fun navigateToProductDetailsTest() {

mainActivityPageObject.navigateToProductList()

productListPageObject.navigateToProductDetails()

productDetailsPageObject.assertProductDetailsDisplayed()
fun firstNavigationTestWithUserFlows() {
val category = "HATS"
val product = "hat white"

productUserFlow {
navigateToCategory(category)
openItemFromProductlist(product)
checkThatCorrectProductIsDisplayed()
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.novoda.androidstoreexample.userflows

import com.novoda.androidstoreexample.pageobjects.mainPage
import com.novoda.androidstoreexample.pageobjects.productDetailsPage
import com.novoda.androidstoreexample.pageobjects.productList

fun productUserFlow(func: ItemUserFlow.() -> Unit) { ItemUserFlow().apply(func) }

class ItemUserFlow {
fun navigateToCategory(category: String) = apply {
mainPage {
navigateToProductList(category)
}
}

fun openItemFromProductlist(product: String) = apply {
productList {
navigateToProductDetails(product)
}
}

fun checkThatCorrectProductIsDisplayed() = apply {
productDetailsPage {
assertProductDetailsDisplayed()
}
}
}

0 comments on commit a17dbf2

Please sign in to comment.