/** * Returns an action that clicks a descendant of the view matched with the given resource id. * * @param id resource id of the view to click. * @return an action that clicks a descendant of the view matched with the given resource id. */ public static ViewAction clickDescendantViewWithId(@IdRes final int id) { return new ViewAction() { @Override public Matcher<View> getConstraints() { return hasDescendant(withId(id)); } @Override public String getDescription() { return "Click on a descendant view with id: " + id; } @Override public void perform(UiController uiController, View view) { GeneralClickAction action = new GeneralClickAction(Tap.SINGLE, GeneralLocation.VISIBLE_CENTER, Press.FINGER); View target = view.findViewById(id); // getConstraints() guarantees that the target never be null. action.perform(uiController, target); } }; }
@Test public void testNewNoteFromQuickMenuWhenCabIsDisplayed() { shelfTestUtils.setupBook("booky", "Booky Preface\n* 1\n** 2\n*** 3\n*** 4\n** 5\n* 6"); activityRule.launchActivity(null); onView(allOf(withText("booky"), isDisplayed())).perform(click()); onView(withId(R.id.action_context_bar)).check(matches(not(isDisplayed()))); onListItem(2).perform(longClick()); /* Swipe left. */ onListItem(2).perform(new GeneralSwipeAction(Swipe.FAST, GeneralLocation.CENTER, GeneralLocation.CENTER_LEFT, Press.FINGER)); onView(withId(R.id.action_context_bar)).check(matches(isDisplayed())); onListItem(2).onChildView(withId(R.id.item_menu_new_under_btn)).perform(click()); onView(withId(R.id.fragment_note_title)).check(matches(isDisplayed())); onView(withId(R.id.done)).check(matches(isDisplayed())); onView(withId(R.id.action_context_bar)).check(matches(not(isDisplayed()))); }
/** * Returns an action that clicks a descendant of the view matched with the given resource id. */ public static ViewAction clickDescendantViewWithId(@IdRes final int id) { return new ViewAction() { @Override public Matcher<View> getConstraints() { return hasDescendant(withId(id)); } @Override public String getDescription() { return "Click on a descendant view with id: " + id; } @Override public void perform(UiController uiController, View view) { GeneralClickAction action = new GeneralClickAction(Tap.SINGLE, GeneralLocation.VISIBLE_CENTER, Press.FINGER); View target = view.findViewById(id); // getConstraints() guarantees that the target never be null. action.perform(uiController, target); } }; }
@Test @MediumTest public void testSwipeUpToExpand() { Espresso.onView(ViewMatchers.withId(R.id.bottom_sheet)) .perform( DesignViewActions.withCustomConstraints( new GeneralSwipeAction( Swipe.FAST, GeneralLocation.VISIBLE_CENTER, new CoordinatesProvider() { @Override public float[] calculateCoordinates(View view) { return new float[] {view.getWidth() / 2, 0}; } }, Press.FINGER), ViewMatchers.isDisplayingAtLeast(5))); registerIdlingResourceCallback(); try { Espresso.onView(ViewMatchers.withId(R.id.bottom_sheet)) .check(ViewAssertions.matches(ViewMatchers.isDisplayed())); assertThat(getBehavior().getState(), is(BottomSheetBehavior.STATE_EXPANDED)); } finally { unregisterIdlingResourceCallback(); } }
/** * Custom ViewAction to click on dedicated coordinates * @param x - * @param y - * @return ViewAction - */ private ViewAction clickXY( final int x, final int y ){ return new GeneralClickAction( Tap.SINGLE, new CoordinatesProvider() { @Override public float[] calculateCoordinates( View view ){ final int[] screenPos = new int[2]; view.getLocationOnScreen(screenPos); final float screenX = screenPos[0] + x; final float screenY = screenPos[1] + y; return new float[]{screenX, screenY}; } }, Press.FINGER); }
private static ViewAction clickXY(final int x, final int y) { return new GeneralClickAction( Tap.SINGLE, new CoordinatesProvider() { @Override public float[] calculateCoordinates(View view) { final int[] screenPos = new int[2]; view.getLocationOnScreen(screenPos); final float screenX = screenPos[0] + x; final float screenY = screenPos[1] + y; float[] coordinates = {screenX, screenY}; return coordinates; } }, Press.FINGER); }
public static ViewAction clickXY(final int x, final int y){ return new GeneralClickAction( Tap.SINGLE, new CoordinatesProvider() { @Override public float[] calculateCoordinates(View view) { final int[] screenPos = new int[2]; view.getLocationOnScreen(screenPos); final float screenX = screenPos[0] + x; final float screenY = screenPos[1] + y; float[] coordinates = {screenX, screenY}; return coordinates; } }, Press.FINGER); }
public static ViewAction clickPercent(final float pctX, final float pctY) { return new GeneralClickAction( Tap.SINGLE, view -> { final int[] screenPos = new int[2]; view.getLocationOnScreen(screenPos); int w = view.getWidth(); int h = view.getHeight(); float x = w * pctX; float y = h * pctY; final float screenX = screenPos[0] + x; final float screenY = screenPos[1] + y; return new float[]{screenX, screenY}; }, Press.FINGER); }
static ViewAction swipeRightNotReachingThreshold(Context context) { final float x = getWidthScreen(context) * 0.3f; return new GeneralSwipeAction(Swipe.SLOW, GeneralLocation.TOP_LEFT, new CoordinatesProvider() { @Override public float[] calculateCoordinates(View view) { return new float[] {x, 0f}; } }, Press.FINGER); }
static ViewAction swipeRightReachingThreshold(Context context) { final float x = getWidthScreen(context) * 0.8f; return new GeneralSwipeAction(Swipe.SLOW, GeneralLocation.TOP_LEFT, new CoordinatesProvider() { @Override public float[] calculateCoordinates(View view) { return new float[] {x, 0f}; } }, Press.FINGER); }
static ViewAction swipeDownNotReachingThreshold(Context context) { final float y = getHeightScreen(context) * 0.3f; return new GeneralSwipeAction(Swipe.SLOW, GeneralLocation.TOP_LEFT, new CoordinatesProvider() { @Override public float[] calculateCoordinates(View view) { return new float[] {0f, y}; } }, Press.FINGER); }
static ViewAction swipeDownReachingThreshold(Context context) { final float y = getHeightScreen(context) * 0.8f; return new GeneralSwipeAction(Swipe.SLOW, GeneralLocation.TOP_LEFT, new CoordinatesProvider() { @Override public float[] calculateCoordinates(View view) { return new float[] {0f, y}; } }, Press.FINGER); }
public static ViewAction swipeUp(final Swiper swipe) { return ViewActions.actionWithAssertions(new GeneralSwipeAction( swipe, GeneralLocation.CENTER, GeneralLocation.TOP_CENTER, Press.FINGER )); }
public static ViewAction swipeDown(final Swiper swipe) { return ViewActions.actionWithAssertions(new GeneralSwipeAction( swipe, GeneralLocation.CENTER, GeneralLocation.BOTTOM_CENTER, Press.FINGER )); }
@Test @MediumTest public void testHalfExpandedToExpanded() throws Throwable { getBehavior().setFitToContents(false); checkSetState(BottomSheetBehavior.STATE_HALF_EXPANDED, ViewMatchers.isDisplayed()); Espresso.onView(ViewMatchers.withId(R.id.bottom_sheet)) .perform( DesignViewActions.withCustomConstraints( new GeneralSwipeAction( Swipe.FAST, GeneralLocation.VISIBLE_CENTER, new CoordinatesProvider() { @Override public float[] calculateCoordinates(View view) { return new float[] {view.getWidth() / 2, 0}; } }, Press.FINGER), ViewMatchers.isDisplayingAtLeast(5))); registerIdlingResourceCallback(); try { Espresso.onView(ViewMatchers.withId(R.id.bottom_sheet)) .check(ViewAssertions.matches(ViewMatchers.isDisplayed())); assertThat(getBehavior().getState(), is(BottomSheetBehavior.STATE_EXPANDED)); } finally { unregisterIdlingResourceCallback(); } }
@Test @MediumTest public void testCollapsedToExpanded() throws Throwable { getBehavior().setFitToContents(false); checkSetState(BottomSheetBehavior.STATE_COLLAPSED, ViewMatchers.isDisplayed()); Espresso.onView(ViewMatchers.withId(R.id.bottom_sheet)) .perform( DesignViewActions.withCustomConstraints( new GeneralSwipeAction( Swipe.FAST, GeneralLocation.VISIBLE_CENTER, new CoordinatesProvider() { @Override public float[] calculateCoordinates(View view) { return new float[] {view.getWidth() / 2, 0}; } }, Press.FINGER), ViewMatchers.isDisplayingAtLeast(5))); registerIdlingResourceCallback(); try { Espresso.onView(ViewMatchers.withId(R.id.bottom_sheet)) .check(ViewAssertions.matches(ViewMatchers.isDisplayed())); assertThat(getBehavior().getState(), is(BottomSheetBehavior.STATE_EXPANDED)); } finally { unregisterIdlingResourceCallback(); } }
@Test @MediumTest public void testInvisible() throws Throwable { // Make the bottomsheet invisible activityTestRule.runOnUiThread( new Runnable() { @Override public void run() { getBottomSheet().setVisibility(View.INVISIBLE); assertThat(getBehavior().getState(), is(BottomSheetBehavior.STATE_COLLAPSED)); } }); // Swipe up as if to expand it Espresso.onView(ViewMatchers.withId(R.id.bottom_sheet)) .perform( DesignViewActions.withCustomConstraints( new GeneralSwipeAction( Swipe.FAST, GeneralLocation.VISIBLE_CENTER, new CoordinatesProvider() { @Override public float[] calculateCoordinates(View view) { return new float[] {view.getWidth() / 2, 0}; } }, Press.FINGER), not(ViewMatchers.isDisplayed()))); // Check that the bottom sheet stays the same collapsed state activityTestRule.runOnUiThread( new Runnable() { @Override public void run() { assertThat(getBehavior().getState(), is(BottomSheetBehavior.STATE_COLLAPSED)); } }); }
public static ViewAction swipeBottomSheetDown() { /* The default swipe action has a constraint where the swiped view has to be displayed in at least 90%, * which is not the case with bottom sheets... */ return new NoConstraintsSwipeAction(Swipe.FAST, GeneralLocation.TOP_CENTER, GeneralLocation. BOTTOM_CENTER, Press.FINGER); }
public static ViewAction swipeBottomSheetUp() { /* The default swipe action has a constraint where the swiped view has to be displayed in at least 90%, * which is not the case with bottom sheets... */ return new NoConstraintsSwipeAction(Swipe.FAST, GeneralLocation.VISIBLE_CENTER, GeneralLocation. TOP_CENTER, Press.FINGER); }
ViewAction swipeAwayRight() { return actionWithAssertions(new GeneralSwipeAction(Swipe.FAST, GeneralLocation.CENTER, new CoordinatesProvider() { @Override public float[] calculateCoordinates(View view) { float xy[] = GeneralLocation.CENTER_RIGHT.calculateCoordinates(view); xy[0] += 20f * view.getWidth(); return xy; } }, Press.FINGER)); }
public static ViewAction clickXY(final int x, final int y){ return new GeneralClickAction( Tap.SINGLE, getCoordinatesProvider(x, y), Press.FINGER); }
public static ViewAction longClickXY(final int x, final int y){ return new GeneralClickAction( Tap.LONG, getCoordinatesProvider(x, y), Press.FINGER); }
/** * Uses a slow swipe to simulate a scroll * @return the view action */ private ViewAction scroll() { return new GeneralSwipeAction(Swipe.SLOW, GeneralLocation.BOTTOM_CENTER, GeneralLocation.TOP_CENTER, Press.FINGER); }
private static ViewAction swipeRight() { return new GeneralSwipeAction(Swipe.FAST, GeneralLocation.CENTER_LEFT, GeneralLocation.CENTER_RIGHT, Press.FINGER); }
private static ViewAction swipeLeft() { return new GeneralSwipeAction(Swipe.FAST, GeneralLocation.CENTER_RIGHT, GeneralLocation.CENTER_LEFT, Press.FINGER); }
public static ViewAction clickOnTop() { return new GeneralClickAction(Tap.SINGLE, GeneralLocation.TOP_CENTER, Press.FINGER); }
public static ViewAction swipeDown() { return new GeneralSwipeAction(Swipe.SLOW, GeneralLocation.TOP_CENTER, GeneralLocation.BOTTOM_CENTER, Press.FINGER ); }
public static ViewAction swipeTop() { return new GeneralSwipeAction(Swipe.FAST, GeneralLocation.BOTTOM_CENTER, GeneralLocation.TOP_CENTER, Press.FINGER); }
public static ViewAction swipeBottom() { return new GeneralSwipeAction(Swipe.FAST, GeneralLocation.TOP_CENTER, GeneralLocation.BOTTOM_CENTER, Press.FINGER); }
private static ViewAction swipeDown() { return new GeneralSwipeAction(Swipe.FAST, GeneralLocation.TOP_CENTER, GeneralLocation.BOTTOM_CENTER, Press.FINGER); }
private static ViewAction swipeDown() { return new GeneralSwipeAction(Swipe.SLOW, GeneralLocation.TOP_CENTER, GeneralLocation.BOTTOM_CENTER, Press.FINGER); }
public CustomClickAction() { this(Tap.SINGLE, GeneralLocation.VISIBLE_CENTER, Press.FINGER); }
public static ViewAction clickOnChild(int childViewId) { return actionWithAssertions((new ChildClickAction( new GeneralClickAction(Tap.SINGLE, GeneralLocation.VISIBLE_CENTER, Press.FINGER), childViewId))); }
/** * Returns an action that performs a swipe right-to-left across the vertical center of the * view. The swipe doesn't start at the very edge of the view, but is a bit offset.<br> * <br> * View constraints: * <ul> * <li>must be displayed on screen * <ul> */ public static ViewAction swipeLeftSlow() { return actionWithAssertions(new GeneralSwipeAction(Swipe.SLOW, translate(GeneralLocation.CENTER_RIGHT, -EDGE_FUZZ_FACTOR, 0), GeneralLocation.CENTER_LEFT, Press.FINGER)); }