Android 自动截屏工具
随着 mac 版本 AndroidTool 的发布,获取 android 应用截屏变得非常简单。与此同时,感谢开发商!这对于我们开发者来说真是太好了!
对于简单应用来说,AndroidTool 是足够满足截屏的功能需求了,然而,我需要在在我正在开发的一款 app 上完成一个完全自动化的截图过程,并且将截图发布到应用市场。我认为这将不简单,所以,我尽量避免复杂的实现过程,而是想办法如何更好的结合 AndroidTool 来完成这个功能。
然而当我昨天阅读了 Enrique López Mañas yesterday 的 Automating Android development 文章,我意识到,他在博客中讨论的话题我已经完成了 4/5。唯一我还没有做的就是测试。我不喜欢测试,然而,那篇文章激励着我去尝试写测试代码。。 所以,我今天早上尝试了一下。经过几个小时编写测试代码,我意外的找到了自动化截图的解决方案。
在这片文章中,我将会谈论关于如何通过 ui 测试来完成自动截图和提交这些截图到应用商店。
UI Automator 查看器
‘uiautomatorviewer’是一个非常强大的工具来查看 views,当发现极好的布局时,我通常会使用‘uiautomatorviewer’来查看,如果你运行这个工具将会获得下图所示。
通过这个工具你可以看到 UI 对象,在这里,我可以检测 TextView 的 id,这个技巧在稍后会变得非常有用。。
UI Automator
Google 在 Android Testing Support Library 里面同时也提供了一个叫做‘UI Automator’ 的库,它允许开发者自动化获取用户交互过程。
使用 UI Automator 时,你需要在你的项目中添加依赖,具体配置信息需要填写在 build.gradle
里面。
正如 文档 中所说。你需要指定 AndroidJUnitRunner 作为你默认的测试工具。
UI Automator 里面频繁使用的类有:UiDevice, UiSelector, UiObject, and UiScrollable.
我们将会在 androidTestScreenshot 文件夹下创建一个简单的测试类,并且这个类继承 InstrumentationTestCase。
这个过程很直接:
首先,监听设备点击“Home”键时,执行 UiDevice 的方法 pressHome()。在每一个测试里面,我们做这样重复性的工作:
从最开始的地方打开 app。我个人发现一个简答的方法去获取截屏。你可以使用 UiDevice 的 pressBack() 方法为其他测试。
获取想要的 UI 交互可以使用 UiSelector, UiScrollable, and UiObject。
使用 SystemClock.sleep 方法,为异步任务的执行腾出一些时间(异步任务的执行可能在截屏之后),以此来避免发生截屏获取的为空异常和 UiObject not found 异常。
最后我们截屏并且将获取的截屏保存在指定的位置。
到目前为止,你可能已经了解了如何使用 uiautomatorviewer 来帮助我们获取许多我们想要的 UI 元素,然而,我使用 UiSelector().resourceId,因为我们可以通过我们在 layout 里面使用的 id 来完成截屏,这样不是更加简单了吗?你也可以有其他选择,比如使用 className, text, etc… 来完成这一过程。
Product Flavor
我不知道为什么 UiAutomator 下的 minSdkVersion 是 18,因为我需要 minSdk 至少是 14,我需要使用这个额外的方法。如果这里有任何其他方法可以避免我自己去实现截屏的,请让我知道。
Android 使用 androidTest 来实现主要的测试工作,也为了实现不同产品的写测试需要,我们需要写我们的测试在 androidTestFlavorName 文件夹。这就是为什么我们在 androidTestScreenshot 路径下创建 SimpleUiTest 类的原因。
万事具备,现在,运行 gradle connectedAndroidTestScreenshotDebug
。在这个测试完成后你将会获得屏幕截图。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: Android 上 MVP 的介绍
下一篇: 自动化截图-应用分发时的自动截图方案
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论