[英]Android Espresso waiting for view, R.id value keeps changing
在我们应用程序的许多部分,我们都有一些视频。 在我的测试中,我正在等待视频完成:
onView(isRoot()).perform(waitId(R.id.activity_generic_video_video_control_next, 80000));
waitId() 是一个 function 我从 StackOverflow 上的一篇帖子中找到了它,它在很长一段时间内都运行良好。 现在由于某种原因它不起作用,我不确定它何时坏了或为什么坏了。
/** Perform action of waiting for a specific view id. */
public static ViewAction waitId(final int viewId, final long millis) {
return new ViewAction() {
@Override
public Matcher<View> getConstraints() {
return isRoot();
}
@Override
public String getDescription() {
return "wait for a specific view with id <" + viewId + "> during " + millis + " millis.";
}
@Override
public void perform(final UiController uiController, final View view) {
uiController.loopMainThreadUntilIdle();
final long startTime = System.currentTimeMillis();
final long endTime = startTime + millis;
final Matcher<View> viewMatcher = withId(viewId);
do {
for (View child : TreeIterables.breadthFirstViewTraversal(view)) {
if (child.getId() != -1) {
Log.d(TAG, "child id " + child.getId() + " vs " + viewId + " vs " + R.id.activity_generic_video_video_control);
}
// found view with required ID and it's visible
if (viewMatcher.matches(child) && child.getVisibility() == View.VISIBLE) {
return;
}
}
uiController.loopMainThreadForAtLeast(50);
}
while (System.currentTimeMillis() < endTime);
// timeout happens
throw new PerformException.Builder()
.withActionDescription(this.getDescription())
.withViewDescription(HumanReadables.describe(view))
.withCause(new TimeoutException())
.build();
}
};
}
如您所见,代码会循环一段时间,直到相关视图可见为止。 有趣的是,我从 for 循环中的日志语句中获取了这个 output:
child id 2131363297 vs 2131362267 vs 2131362265
第一个 # 是给出遍历显示树的原因的视图的 ID。 第二个# 是传递给function 的ID。第三个# 是直接引用R.id 时同一视图的ID。
我可以说至少第二个和第三个数字应该相同,但事实并非如此。 这是怎么回事? 为什么id值会改变?
什么是资源activity_generic_video_video_control_next
? 如果它是 animation,它可以更改 res id。
你应该得到一个错误解释:
也许主线程在合理的时间内没有空闲? 可能有一个 animation 或不断重绘屏幕的东西。 或者活动正在做。网络调用创建? 请参阅线程转储日志。
由于您正在播放视频,如果重绘 canvas(连同按钮),则由以下原因引起:
...一个 animation 或不断重绘屏幕的东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.