我是Espresso的新手。这就是为什么这可能更像是“应该这样做,还是我做错了”这类问题。
但基本上我在使用Espresso测试我的WebView时遇到了问题。当我使用WebView到达Activity(实际上是片段)时,Espresso无法确定视图是否空闲,我得到了可怕的AppNotIdleException
异常。我不知道我做错了什么,或者这种情况是否有效。
这是我的测试基本上:
@Test
public void testIncludingWebView() {
// Go to the activity we want to test. Note, tests start actually earlier.
onView(allOf(withId(R.id.action_open_activity1), isCompletelyDisplayed()))
.perform(click());
// We arrived at the right Activity.
assertEquals(Activity1.class, Utils.getCurrentActivity().getClass());
// Select an item from a GridView in the Activity that will launch the WebView.
onData(MyMatcher.withName(is("Dummy")))
.perform(click());
// We should arrive to an Activity with a Fragment. The Fragment will
// display a full screen DialogFragment that contains the WebView.
assertEquals(WebViewActivity.class, Utils.getCurrentActivity().getClass()); // <== We never assert this
// Some tests on the WebView. But these are never run.
onWebView().forceJavascriptEnabled();
onWebView().withElement(findElement(Locator.NAME, "name"))
.perform(DriverAtoms.webKeys("some text"))
.withElement(findElement(Locator.XPATH, "//button[contains(text(), 'Submit')]"))
.perform(webClick());
}
回顾一下:我有一些我导航到的活动,最后我到达一个带有片段的活动,这个片段将显示一个带有WebView的全屏DialogFragment。当我到达这里时,Espresso无法确定闲置状态。
另外非常重要的一点是,当我启用Developer Options -> Show screen updates
时,我可以看到屏幕不断闪烁在我获得超时异常的视图上,这意味着屏幕不断更新。 AFAIK Espresso确定应用程序是否空闲的一个方法是等待屏幕渲染结束。所以这可能就是问题所在。
但为什么屏幕会一直更新?我猜这里有它的优点; Chrome / WebView是否一直在更新屏幕,因为我打开WebView的方式还是有一些我想要找到的未知动画?我试图在视图中寻找可以停止的动画,但由于它只是我正在显示的WebView,我还没有找到任何东西。
其他人是否能够使用Espresso测试这种情况?