我正在使用博客中提到的上述技术,但是我注意到它不会等待我试图设置的15秒。我在这里的问题是,如果所有后端任务在15秒前完成,espresso是否识别它并开始下一个连续的操作?任何关于这方面的线索都很感激。
public class ElapsedTimeIdlingResource implements IdlingResource {
private final long startTime;
private final long waitingTime;
private ResourceCallback resourceCallback;
public ElapsedTimeIdlingResource(long waitingTime) {
this.startTime = System.currentTimeMillis();
this.waitingTime = waitingTime;
}
@Override
public String getName() {
return ElapsedTimeIdlingResource.class.getName() + ":" + waitingTime;
}
@Override
public boolean isIdleNow() {
long elapsed = System.currentTimeMillis() - startTime;
boolean idle = (elapsed >= waitingTime);
if (idle) {
resourceCallback.onTransitionToIdle();
}
return idle;
}
@Override
public void registerIdleTransitionCallback(
ResourceCallback resourceCallback) {
this.resourceCallback = resourceCallback;
}
}
==
long waitingTime = DateUtils.MINUTE_IN_MILLIS / 4;
IdlingPolicies.setMasterPolicyTimeout(
waitingTime * 2, TimeUnit.MILLISECONDS);
IdlingPolicies.setIdlingResourceTimeout(
waitingTime * 2, TimeUnit.MILLISECONDS);
IdlingResource idlingResource
= new ElapsedTimeIdlingResource(waitingTime);
Espresso.registerIdlingResources(idlingResource);发布于 2017-01-28 19:28:36
您需要在registerIdlingResources()之后运行Espresso命令,任何Espresso命令。我已经在我自己的PC上创建了这个例子单元测试,它工作得很好。
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Rule public ActivityTestRule<MainActivity> rule = new ActivityTestRule<>(MainActivity.class);
private final long waitingTime = DateUtils.MINUTE_IN_MILLIS / 4;
@Before public void setUp() {
IdlingPolicies.setMasterPolicyTimeout(waitingTime * 2, TimeUnit.MILLISECONDS);
IdlingPolicies.setIdlingResourceTimeout(waitingTime * 2, TimeUnit.MILLISECONDS);
}
@Test public void useAppContext() throws Exception {
IdlingResource idlingResource = new ElapsedTimeIdlingResource(waitingTime);
Espresso.registerIdlingResources(idlingResource);
onView(withId(R.id.btnStart)).perform(click());
Espresso.unregisterIdlingResources(idlingResource);
assertTrue(true);
}
}

在我的示例中,我有一个名为btnStart的按钮,可以执行单击,但它可以是与应用程序相关的任何东西。如果这对你有用的话请告诉我。
并在评论中直接回答您的进一步问题:
isIdleNow()进行轮询。当idle是true时,这是Espresso继续执行下一个命令的信号。如果要阻塞,则需要isIdleNow()返回false。ViewMatchers、单击等),而不是任何其他线程。这项活动将继续正常运作。https://stackoverflow.com/questions/41907432
复制相似问题