onData(anything()).inAdapterView(withId(R.id.ScheduleOrderListViewListView))
.atPosition(0).perform(click());
выполняет 50% времени длинное касание - есть ли хороший обходной путь?
onData(anything()).inAdapterView(withId(R.id.ScheduleOrderListViewListView))
.atPosition(0).perform(click());
выполняет 50% времени длинное касание - есть ли хороший обходной путь?
Это неприятный побочный эффект того, как события касания передаются из вашего тестового кода через RPC в тестируемое приложение Android. Лучшее описание того, почему клики иногда выполняются как длинные клики, можно найти в Исходный код эспрессо.
Вряд ли эта проблема будет решена в ближайшее время. Лучший способ избежать этой проблемы — запустить тесты на устройствах с более высокими характеристиками. Это связано с тем, что вероятность возникновения проблемы зависит от загрузки системы.
В дополнение к тому, что сказал Чарльз, я нашел здесь 3 обходных пути: https://github.com/misyobun/android-test-kit/issues/45
Обходной путь 1: (и, возможно, лучший) — передать действие отката в случае, если щелчок превращается в долгий щелчок. В этом случае длинный щелчок будет «отменен», и эспрессо попытается повторить щелчок.
/**
* Returns an action that performs a single click on the view.
*
* If the click takes longer than the 'long press' duration (which is possible) the provided
* rollback action is invoked on the view and a click is attempted again.
*
* This is only necessary if the view being clicked on has some different behaviour for long press
* versus a normal tap.
*
* For example - if a long press on a particular view element opens a popup menu -
* ViewActions.pressBack() may be an acceptable rollback action.
*
* <br>
* View constraints:
* <ul>
* <li>must be displayed on screen</li>
* <li>any constraints of the rollbackAction</li>
* <ul>
*/
public static ViewAction click(ViewAction rollbackAction) {
checkNotNull(rollbackAction);
return new GeneralClickAction(Tap.SINGLE, GeneralLocation.CENTER, Press.FINGER,
rollbackAction);
}
Обходной путь 2: это не "способ эспрессо", но он может подойти для некоторых сценариев:
public class CallOnClickAction implements ViewAction {
@Override
public Matcher<View> getConstraints() {
return allOf(isClickable(), isDisplayed());
}
@Override
public String getDescription() {
return "CallOnClick";
}
@Override
public void perform(UiController uiController, View view) {
view.callOnClick();
}
}
Временное решение 3: если вы не используете двойной щелчок в этом представлении, в этом случае это может быть полезно.
Еще один дополнительный обходной путь — запустить следующую команду на уровне API > 16.
adb shell settings put secure long_press_timeout 1500
У меня был этот эффект, когда анимация была включена. Анимация должна быть отключена для эспрессо