CircularProgressLayout 没有在 Espresso 中双击

Posted

技术标签:

【中文标题】CircularProgressLayout 没有在 Espresso 中双击【英文标题】:CircularProgressLayout not double clicking in Espresso 【发布时间】:2021-02-05 12:00:28 【问题描述】:

对于 android Wear 应用,我们使用 CircularProgressLayout。 我们希望用户在 2 秒内确认点击,而不是允许用户取消点击。 因此,用户需要在 2 秒内点击两次,才能退出应用。 我们使用了漂亮的圆形动画,因此用户可以看到他们还剩下多少时间来确认他们的操作。

我想测试用户是否可以使用 Espresso 退出我们的应用,所以我调用了两次 click。

onView(withId(R.id.exit)).perform(click(), click());
// code to verify app was closed here

很遗憾,Espresso 会:

执行第一次点击 等待 2 秒 执行第二次点击

导致测试失败。 我相信,Espresso 会等待动画完成,然后再执行第二次点击。 但在这种情况下,我需要立即执行点击。

额外信息:

动画/过渡被禁用,但这不会阻止 CircularProgressLayout 的动画。 我也尝试了perform(doubleClick());,但即便如此,在第一次和第二次点击之间也会等待 2 秒。 我还尝试滥用onLongClick() 作为黑客确认退出应用程序。这确实有效,但它是一个黑客。我只想让 espresso 点击两次。

有什么建议可以让 Espresso 在不等待动画的情况下点击两次?

【问题讨论】:

【参考方案1】:

决定写我自己的ClickTwiceViewAction。在ViewAction.perform() 方法内部,很容易调用performClick() 两次。

在您的测试中使用:

onView(withId(R.id.exit)).perform(clickTwice(200)); // 200 is the delay between both clicks

这是我写的ClickTwiceAction

public class ClickTwiceViewAction implements ViewAction 

    public static ViewAction clickTwice(long delayInMillis) 
        return actionWithAssertions(new ClickTwiceViewAction(delayInMillis));
    

    private final long mDelayInMillis;

    private ClickTwiceViewAction(long delayInMillis) 
        mDelayInMillis = delayInMillis;
    

    @Override
    public Matcher<View> getConstraints() 
        return ViewMatchers.isAssignableFrom(CircularProgressLayout.class);
    

    @Override
    public String getDescription() 
        return "click twice on displayed view";
    

    @Override
    public void perform(UiController uiController, View view) 
        view.postDelayed(view::performClick, 0);
        view.postDelayed(view::performClick, mDelayInMillis);
    

我将此操作限制为仅限CircularProgressLayout,但可以通过更改getConstraints() 将其应用于任何View(如果需要)

【讨论】:

以上是关于CircularProgressLayout 没有在 Espresso 中双击的主要内容,如果未能解决你的问题,请参考以下文章

linux下tomcat启动没有日志,没有进程,没有报错,没有监听端口

程序崩溃, 没有任何提示!没有异常!没有任何错误日志。。。

为啥 HKSample 数组对于一个没有限制、没有谓词、没有锚点的 HKAnchoredObjectQuery 总是有 1 个值?

为啥 HKSample 数组对于一个没有限制、没有谓词、没有锚点的 HKAnchoredObjectQuery 总是有 1 个值?

Eclipse C++ 问题:没有二进制文件(但没有编译器错误),没有类(但在类层次结构中没有条目)

PLSQL提示没有登录ORA-01012:没有登录