使用Espresso来testingGoogle地图

我正在使用Espresso在我的应用程序上进行一些UItesting。 我有一个地图的片段,我显示了一些项目,我通过调用我的后端。

当我点击一个标记,我正在做一些UI的东西

有没有什么办法可以在我的地图上用espresso做unit testing?

Related of "使用Espresso来testingGoogle地图"

简答:用浓咖啡并不是真的可行。 解决scheme可能是使用UIAutomator: https : //developer.android.com/tools/testing-support-library/index.html#UIAutomator https://developer.android.com/training/testing/ui-testing/uiautomator -testing.html

所以你需要:

1)添加gradle依赖关系:

 dependencies { androidTestCompile 'com.android.support.test:runner:0.2' androidTestCompile 'com.android.support.test:rules:0.2' androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.1' } 

2)确保即使不使用标记,也至less要添加标题。

3)写testing代码是这样的:

 UiDevice device = UiDevice.getInstance(getInstrumentation()); UiObject marker = device.findObject(new UiSelector().descriptionContains("marker title")); marker.click(); 

说明:

谷歌地图生成用户界面,也使得它可以访问,即地图内容可以被视为一个可访问性节点信息树。

这是树是一个虚拟视图树,它并不代表真正的视图树。 我们稍后再来

默认情况下,地图的contentDescription是“Google Map”,标记的contentDescription是“{markerTitle}。{markerSnippet}”。

那么问题是为什么不使用espresso:

onView(withContentDescription("marker title. ")).perform(click());

因为它不会find它,但是:

 onView(withContentDescription("Google Map")).perform(click()); 

将工作得很好。

那么UIAutomator如何工作,Espresso不是?

因为他们使用不同的视图树。

UIAutomator使用由AccessibilityService提供的辅助function节点信息的树,而Espresso使用视图层次结构,从而处理任何ViewGroup的所有子节点。 辅助function节点信息和视图层次可能会或可能不会一一映射。 在这种情况下

onView(withContentDescription(“Google Map”))

发现不是一个ViewGroup,而是一个不知道有孩子的TextureView,所以Espresso无法知道在那里画的是什么。

瞧! 🙂