package com.neoranga55.cleanguitestarchitecture.cucumber.pages; import com.neoranga55.cleanguitestarchitecture.R; import static android.support.test.espresso.Espresso.onView; import static android.support.test.espresso.action.ViewActions.click; import static android.support.test.espresso.action.ViewActions.closeSoftKeyboard; import static android.support.test.espresso.action.ViewActions.typeText; import static android.support.test.espresso.assertion.ViewAssertions.matches; import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed; import static android.support.test.espresso.matcher.ViewMatchers.withId; /** * This class will expose and implement all behaviors and most checks of the LoginActivity */ public class LoginPage extends BasePage { protected static final String SCREENSHOT_TAG = "LoginPage"; /** * The constructor verifies that we are on the correct page by checking * the existence of the unique identifier elements of the page/view */ public LoginPage() { onView(withId(R.id.login_activity)).check(matches(isDisplayed())); } /** * Perform the login and return the next Welcome page/view * @param userName Name of the user to login * @param password Password of the user to login * @return Welcome page/view */ public WelcomePage doLogin(String userName, String password) { // Warning: In some devices with custom software keyboards, the first time that // the keyboard is opened it can have strange behaviors and delete letters typed // during the typeText() method. I could reproducible this with a Swype keyboard. // Solution: Change the keyboard on the device to the system's default onView(withId(R.id.username)).perform(typeText(userName)); onView(withId(R.id.password)).perform(typeText(password), closeSoftKeyboard()); onView(withId(R.id.login_button)).perform(click()); return new WelcomePage(); } }