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 个值?