我向WindowManager添加一个浮动视图,并使其在屏幕上移动,我点击此视图时可以执行点击事件,一切正常。
但是,我不知道如何在espresso或UIAutomator中访问此视图。
final WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT,
type,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
| WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
PixelFormat.TRANSLUCENT
);
ImageView floatingView = new ImageView(mContext);
floatingView.setContentDescription("bugtags_fab_des_normal");
mWindowManager.addView(floatingView, layoutParams);
rect中的白蓝色图标是我正在谈论的浮动视图。
浮动视图响应点击事件,并执行一些任务,现在我想在AndroidJunit测试中执行此操作。
我使用onView方法尝试Espresso,但测试用例:
onView(withContentDescription("bugtags_fab_des_normal")).perform(click());
得到:
android.support.test.espresso.NoMatchingViewException: No views in hierarchy found matching: with content description: is "bugtags_fab_des_normal"
我尝试UIAutomator Viewer,但我在视图层次结构中找不到floatingView。
如何在 espresso或uiautomator 中访问此视图并执行点击操作?
@Test
public void testInvoke() {
onView(withContentDescription("bugtags_fab_des_normal")).perform(click());
}
实际上,我使用的是名为bugtags.com的sdk,它是应用程序错误报告和崩溃分析的简单工具。
答案 0 :(得分:8)
您的观点不在Activity
之内,因此可以使用inRoot()
方法找到它:
@Test
public void checkClickOnFloatingButton() {
onView(withContentDescription("bugtags_fab_des_normal")).inRoot(withDecorView(not(is(getActivity().getWindow().getDecorView())))).perform(click());
}
此外,您可能应该在这段代码中将reportImage
更改为floatingView
:
ImageView floatingView = new ImageView(mContext);
reportImage.setContentDescription("bugtags_fab_des_normal"); // <---`reportImage` to `floatingView`
mWindowManager.addView(floatingView, layoutParams);
答案 1 :(得分:-1)
在floatingView