如何使用 Espresso 框架单击上下文操作栏项目

How to click contextual action bar item using Espresso framework

我正在编写一个测试用例,长按我的 ListView 中的一个项目(由 CursorAdapter 支持),这将拉出一个上下文操作栏并有一个允许用户删除该项目的菜单项。

我使用以下代码:

public void testDeleteFirstAccount(){
    // Long click
    onData(is(instanceOf(Cursor.class))).atPosition(0).perform(longClick());

    // Click delete menu item
    onView(withId(R.id.action_delete_account)).perform(click());

    // Find alert button with text
    onView(withText("Yes")).perform(click());
}

但是,我无法单击按钮,因为我认为测试 运行 太快了。我收到以下错误:

android.support.test.espresso.PerformException: Error performing 'single click' on view 'with id: com.example.android.cashcaretaker:id/action_delete_account'.

Caused by: java.lang.RuntimeException: Action will not be performed because the target view does not match one or more of the following constraints: at least 90 percent of the view's area is displayed to the user.

我认为测试速度太快的原因是,如果我在长按后添加 Thread.sleep(),一切都会正常进行。我这样做只是为了验证我的怀疑,我不确定像那样停止 UI 是继续前进的正确方法。

我也尝试添加 getInstrumentation().waitForIdleSync() 但没有成功。

我是不是做错了什么?使用 Espresso 单击 CAB 项目的正确方法是什么?

可能在 Espresso 尝试单击 ContextualActionBar 项目时,视图仍在进行动画处理。如果您设置超时,则动画有时间完成并且在执行单击时视图已完全显示。

您是否已按照 Espresso Setup guide 中所述尝试在测试设备中禁用动画?