Android测试浮动视图

时间:2016-01-15 03:42:36

标签: android android-testing android-espresso android-uiautomator

我向WindowManager添加一个浮动视图,并使其在屏幕上移动,我点击此视图时可以执行点击事件,一切正常。

但是,我不知道如何在espresso或UIAutomator中访问此视图

将视图添加到WindowManager

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中的白蓝色图标是我正在谈论的浮动视图。

floating-view

问题

浮动视图响应点击事件,并执行一些任务,现在我想在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

我尝试UIAutomator Viewer,但我在视图层次结构中找不到floatingView。

如何

如何在 espresso或uiautomator 中访问此视图并执行点击操作?

附录

测试用例

@Test
public void testInvoke() {
    onView(withContentDescription("bugtags_fab_des_normal")).perform(click());
}

输出日志

output-log-gist

Bugtags.com

实际上,我使用的是名为bugtags.com的sdk,它是应用程序错误报告和崩溃分析的简单工具。

2 个答案:

答案 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

上添加onClickListener