gpt4 book ai didi

java - 在 Espresso Java/Android 中等待匹配器

转载 作者:行者123 更新时间:2023-11-30 00:39:02 25 4
gpt4 key购买 nike

我从 here 中找到了一个非常酷的代码块这有助于执行等待功能,直到资源 withId(int) 出现 - 当我实际上有一个资源 ID 可以使用时,它似乎工作正常。

但是,我正在使用的应用程序通常没有简单的资源 ID,我必须改为使用 Matchers。

一个例子:

Matcher secondBanner = allOf(childAtPosition(allOf(withId(R.id.story_details_body),
childAtPosition(IsInstanceOf.<View>instanceOf(
android.widget.LinearLayout.class),2)),0)))

有什么方法可以像资源 ID 一样在 Matcher 上执行类似的等待?

我在上一个链接中指的代码是 -

/** 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)) {
// found view with required ID
if (viewMatcher.matches(child)) {
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();
}
};
}

我尝试简单地将所有内容从 withId(int) 更改为 Matcher 但无济于事。

那么是否可以将这段代码转换成可以执行等待/超时的代码?

感谢您提供的所有帮助。

最佳答案

您可以简单地使用 Thread.sleep(timeInMilisec)。它会按原样等待某个指定的时间。

Idling Resources没关系,但您不仅需要在测试中添加一些额外的代码,还需要在您的项目中添加一些额外的代码。您可以在代码中指定测试何时应该等待以及何时应该再次进行。

关于java - 在 Espresso Java/Android 中等待匹配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42865182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com