Android Espresso执行longClick而非click

PKA*_*KAP 9 android-espresso

onData(anything()).inAdapterView(withId(R.id.ScheduleOrderListViewListView))
                .atPosition(0).perform(click());
Run Code Online (Sandbox Code Playgroud)

50%的时间是长时间触控 - 有一个很好的解决方法吗?

Cha*_*ley 8

这是一个令人遗憾的副作用,即如何通过RPC将测试代码传递给测试中的Android应用程序.有关点击有时会执行的最佳说明,因为可以在Espresso源代码中找到长按.

这个问题不太可能很快修复.避免此问题的最佳选择是在更高规格的设备上运行测试.这是因为发生问题的可能性取决于系统负载.

  • 作为一种额外的解决方法,请尝试在**设置 - >辅助功能 - >触摸并保持延迟**下增加测试设备/仿真器的长按延迟值** (3认同)

Yai*_*lka 8

除了查尔斯所说的,我在这里找到了 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);
  }
Run Code Online (Sandbox Code Playgroud)

解决方法 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();

    }
 }
Run Code Online (Sandbox Code Playgroud)

解决方法 3:如果您没有在该视图上使用双击,则在这种情况下它可能很有用。