下面列出了怎么用android.support.test.espresso.ViewAction的API类实例代码及写法,或者点击链接到github查看源代码。
/**
* Perform action of waiting for a specific time. Useful when you need
* to wait for animations to end and Espresso fails at waiting.
* <p/>
* E.g.:
* onView(isRoot()).perform(waitAtLeast(Sampling.SECONDS_15));
*
* @param millis
* @return
*/
public static ViewAction waitAtLeast(final long millis) {
return new ViewAction() {
@Override
public Matcher<View> getConstraints() {
return anything();
}
@Override
public String getDescription() {
return "wait for at least " + millis + " millis.";
}
@Override
public void perform(final UiController uiController, final View view) {
uiController.loopMainThreadUntilIdle();
uiController.loopMainThreadForAtLeast(millis);
}
};
}
private static ViewAction showControls() {
return new ViewAction() {
@Override
public Matcher<View> getConstraints() {
return isAssignableFrom(MovieView.class);
}
@Override
public String getDescription() {
return "Show controls of MovieView";
}
@Override
public void perform(UiController uiController, View view) {
uiController.loopMainThreadUntilIdle();
((MovieView) view).showControls();
uiController.loopMainThreadUntilIdle();
}
};
}
private static ViewAction showControls() {
return new ViewAction() {
@Override
public Matcher<View> getConstraints() {
return isAssignableFrom(MovieView.class);
}
@Override
public String getDescription() {
return "Show controls of MovieView";
}
@Override
public void perform(UiController uiController, View view) {
uiController.loopMainThreadUntilIdle();
((MovieView) view).showControls();
uiController.loopMainThreadUntilIdle();
}
};
}
/**
* Test if the manual input activity opens.
*/
@Test
public void testGoToManual() {
onView(withId(R.id.manual_input_button)).check(matches(allOf( isEnabled(), isClickable()))).perform(
new ViewAction() {
@Override
public Matcher<View> getConstraints() {
return isEnabled(); // no constraints, they are checked above
}
@Override
public String getDescription() {
return "click manual input button";
}
@Override
public void perform(UiController uiController, View view) {
view.performClick();
}
}
);
intended(hasComponent(ManualInputActivity.class.getName()));
}
public static ViewAction typeQuery(final String value) {
return new ViewAction() {
@Override
public Matcher<View> getConstraints() {
return allOf(isDisplayed(), isAssignableFrom(SearchView.class));
}
@Override
public void perform(UiController uiController, View view) {
((SearchView) view).setQuery(value, false);
}
@Override
public String getDescription() {
return String.format("type query(%s)", value);
}
};
}
public static String getTextFromMatcher(final Matcher<View> matcher) {
final String[] stringHolder = { null };
onView(matcher).perform(new ViewAction() {
@Override
public Matcher<View> getConstraints() {
return isAssignableFrom(TextView.class);
}
@Override
public String getDescription() {
return "getting text from a TextView";
}
@Override
public void perform(final UiController uiController, final View view) {
final TextView tv = (TextView) view;
stringHolder[0] = tv.getText().toString();
}
});
return stringHolder[0];
}
public static ViewAction forceCommitText(final String text) {
return new ViewAction() {
@Override
public Matcher<View> getConstraints() {
return isAssignableFrom(ContactsCompletionView.class);
}
@Override
public String getDescription() {
return null;
}
@Override
public void perform(UiController uiController, View view) {
ContactsCompletionView completionView = (ContactsCompletionView)view;
InputConnection connection = completionView.testAccessibleInputConnection;
connection.commitText(text, 1);
}
};
}
public static ViewAction waitFor(final long millis) {
return new ViewAction() {
@Override
public Matcher<View> getConstraints() {
return isRoot();
}
@Override
public String getDescription() {
return "Wait for " + millis + " milliseconds.";
}
@Override
public void perform(UiController uiController, final View view) {
uiController.loopMainThreadForAtLeast(millis);
}
};
}
public static ViewAction clickChildViewWithId(final int id) {
return new ViewAction() {
@Override
public Matcher<View> getConstraints() {
return null;
}
@Override
public String getDescription() {
return "Click on a child view with specified id.";
}
@Override
public void perform(UiController uiController, View view) {
View v = view.findViewById(id);
if (v != null) {
v.performClick();
}
}
};
}
public static ViewAction clickAnecdoteTextViewWithId(final int id) {
return new ViewAction() {
@Override
public Matcher<View> getConstraints() {
return null;
}
@Override
public String getDescription() {
return "Click on a child view with specified id.";
}
@Override
public void perform(UiController uiController, View view) {
View v = view.findViewById(id);
if (v != null) {
v.performClick();
}
}
};
}
@Test
public synchronized void smoothScrollToPosition_ScrollItemIsNotVisible_FirstVisiblePositionsEqualsScrollingTarget() throws Exception {
//arrange
InstrumentalUtil.waitForIdle();
//act
ViewAction scrollAction = smoothScrollToPosition(18);
//noinspection SynchronizationOnLocalVariableOrMethodParameter
synchronized (scrollAction) {
recyclerView.perform(scrollAction);
//wait for completion of SmoothScrollAction
scrollAction.wait();
}
//assert
int actual = layoutManager.findFirstCompletelyVisibleItemPosition();
assertEquals(18, actual);
}
@Test
public synchronized void smoothScrollToPosition_ScrollItemIsVisible_ScrollItemDockedToStartBorder() throws Exception {
//arrange
InstrumentalUtil.waitForIdle();
//act
ViewAction scrollAction = smoothScrollToPosition(3);
//noinspection SynchronizationOnLocalVariableOrMethodParameter
synchronized (scrollAction) {
recyclerView.perform(scrollAction);
//wait for completion of SmoothScrollAction
scrollAction.wait();
}
//assert
int actual = layoutManager.findFirstCompletelyVisibleItemPosition();
assertEquals(3, actual);
}
@Test
public synchronized void smoothScrollToPosition_LMInInitialState_FirstVisiblePositionsEqualsScrollingTarget() throws Exception {
//arrange
InstrumentalUtil.waitForIdle();
//act
ViewAction scrollAction = smoothScrollToPosition(8);
//noinspection SynchronizationOnLocalVariableOrMethodParameter
synchronized (scrollAction) {
recyclerView.perform(scrollAction);
//wait for completion of SmoothScrollAction
scrollAction.wait();
}
//assert
int actual = layoutManager.findFirstCompletelyVisibleItemPosition();
assertEquals(8, actual);
}
public static ViewAction collapse() {
return new ViewAction() {
@Override
public Matcher<View> getConstraints() {
return ViewMatchers.isAssignableFrom(AppBarLayout.class);
}
@Override
public String getDescription() {
return "Collapse AppBarLayout inside of a CollapsingToolbarLayout.";
}
@Override
public void perform(UiController uiController, View view) {
AppBarLayout appBarLayout = (AppBarLayout) view;
appBarLayout.setExpanded(false, false);
}
};
}
public static ViewAction expand() {
return new ViewAction() {
@Override
public Matcher<View> getConstraints() {
return ViewMatchers.isAssignableFrom(AppBarLayout.class);
}
@Override
public String getDescription() {
return "Expand AppBarLayout inside of a CollapsingToolbarLayout.";
}
@Override
public void perform(UiController uiController, View view) {
AppBarLayout appBarLayout = (AppBarLayout) view;
appBarLayout.setExpanded(true, false);
}
};
}
public static void forIdle() {
onView(isRoot()).perform(new ViewAction() {
@Override
public Matcher<View> getConstraints() {
return isRoot();
}
@Override
public String getDescription() {
return null;
}
@Override
public void perform(UiController uiController, View view) {
uiController.loopMainThreadForAtLeast(1000);
uiController.loopMainThreadUntilIdle();
}
});
}
/**
* 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);
}
/**
* 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);
}
/**
* Clicks the Next button.
*/
public static ViewAction clickNext() {
return new AbstractStepperNavigationAction() {
@Override
public String getDescription() {
return "Click on the Next button";
}
@Override
protected void performAction(StepperLayout stepperLayout) {
View nextButton = stepperLayout.findViewById(com.stepstone.stepper.R.id.ms_stepNextButton);
nextButton.performClick();
}
};
}
/**
* Clicks the Back button.
*/
public static ViewAction clickBack() {
return new AbstractStepperNavigationAction() {
@Override
public String getDescription() {
return "Click on the Back button";
}
@Override
protected void performAction(StepperLayout stepperLayout) {
View backButton = stepperLayout.findViewById(com.stepstone.stepper.R.id.ms_stepPrevButton);
backButton.performClick();
}
};
}
/**
* Clicks the Complete button.
*/
public static ViewAction clickComplete() {
return new AbstractStepperNavigationAction() {
@Override
public String getDescription() {
return "Click on the Complete button";
}
@Override
protected void performAction(StepperLayout stepperLayout) {
View completeButton = stepperLayout.findViewById(com.stepstone.stepper.R.id.ms_stepCompleteButton);
completeButton.performClick();
}
};
}
public static ViewAction setProgress(int progress) {
return new ViewAction() {
@Override
public void perform(UiController uiController, View view) {
SeekBar seekBar = (SeekBar) view;
seekBar.setProgress(progress);
}
@Override
public String getDescription() {
return "Set a progress on a SeekBar";
}
@Override
public Matcher<View> getConstraints() {
return ViewMatchers.isAssignableFrom(SeekBar.class);
}
};
}
public static ViewAction setProgress(int progress) {
return new ViewAction() {
@Override
public void perform(UiController uiController, View view) {
SeekBar seekBar = (SeekBar) view;
seekBar.setProgress(progress);
}
@Override
public String getDescription() {
return "Set a progress on a SeekBar";
}
@Override
public Matcher<View> getConstraints() {
return ViewMatchers.isAssignableFrom(SeekBar.class);
}
};
}
static ViewAction setAspectRatio(@NonNull final AspectRatio ratio) {
return new ViewAction() {
@Override
public Matcher<View> getConstraints() {
return isAssignableFrom(CameraView.class);
}
@Override
public String getDescription() {
return "Set aspect ratio to " + ratio;
}
@Override
public void perform(UiController controller, View view) {
((CameraView) view).setAspectRatio(ratio);
}
};
}
public static ViewAction clickChildViewWithId(final int id) {
return new ViewAction() {
@Override
public Matcher<View> getConstraints() {
return null;
}
@Override
public String getDescription() {
return null;
}
@Override
public void perform(UiController uiController, View view) {
View v = view.findViewById(id);
v.performClick();
}
};
}
/**
* Clicks on the tab for the provided Unit Type name. Note that the Unit Type
* doesn't need to be visible.
*/
public static void selectUnitTypeDirect(final String unitTypeName) {
onView(allOf(withText(unitTypeName))).perform(
new ViewAction() {
@Override
public Matcher<View> getConstraints() {
return isEnabled(); // no constraints, they are checked above
}
@Override
public String getDescription() {
return "click unit type" + unitTypeName;
}
@Override
public void perform(UiController uiController, View view) {
view.performClick();
}
}
);
}
/**
* Perform action of waiting until UI thread is free.
* <p/>
* E.g.:
* onView(isRoot()).perform(waitUntilIdle());
*
* @return
*/
public static ViewAction waitUntilIdle() {
return new ViewAction() {
@Override
public Matcher<View> getConstraints() {
return anything();
}
@Override
public String getDescription() {
return "wait until UI thread is free";
}
@Override
public void perform(final UiController uiController, final View view) {
uiController.loopMainThreadUntilIdle();
}
};
}
/**
* Perform action of waiting for a specific time. Useful when you need
* to wait for animations to end and Espresso fails at waiting.
* <p/>
* E.g.:
* onView(isRoot()).perform(waitAtLeast(Sampling.SECONDS_15));
*
* @param millis
* @return
*/
public static ViewAction waitAtLeast(final long millis) {
return new ViewAction() {
@Override
public Matcher<View> getConstraints() {
return anything();
}
@Override
public String getDescription() {
return "wait for at least " + millis + " millis.";
}
@Override
public void perform(final UiController uiController, final View view) {
uiController.loopMainThreadUntilIdle();
uiController.loopMainThreadForAtLeast(millis);
}
};
}
public static ViewAction forceComposingText(final String text) {
return new ViewAction() {
@Override
public Matcher<View> getConstraints() {
return isAssignableFrom(ContactsCompletionView.class);
}
@Override
public String getDescription() {
return null;
}
@Override
public void perform(UiController uiController, View view) {
ContactsCompletionView completionView = (ContactsCompletionView)view;
InputConnection connection = completionView.testAccessibleInputConnection;
connection.setComposingText(text, -1);
}
};
}
private String getText(final Matcher<View> matcher) {
final String[] stringHolder = {null};
onView(matcher).perform(new ViewAction() {
@Override
public Matcher<View> getConstraints() {
return isAssignableFrom(TextView.class);
}
@Override
public String getDescription() {
return "getting text from a TextView";
}
@Override
public void perform(UiController uiController, View view) {
TextView tv = (TextView) view;
stringHolder[0] = tv.getText().toString();
}
});
return stringHolder[0];
}