赞
踩
>
* 原文链接 : Screenshots Through Automation
* 作者 : Flavien Laurent
* 译者 : chaossss
* 校对者: sundroid
* 状态 : 校对完成
在发布 App 到应用商店时有一件的事情不得不做,就是上传最新的高清无码截图到应用商店上。可是如果你的 App 有许多页面,那你每次发布更新都可能是一场梦魇,因为你需要一页一页地去截图。为了解决众多 App 开发者的这个痛点,我将在这篇博文中介绍一个实现自动化截图的方法:
刚到 Capitaine Train 公司里,就有人让我造个能自动截图的轮子,因为我们公司的 App 每次版本更新都让人很头疼:问题在于我们的 App 对应有3种设备,4种语言,也就是有 12 种版本。此外,我们有6个需要截图的页面,也就是说,我们每次版本更新都需要72张截图。我们无法忍受这种低效并浪费时间的工作,于是我们经过不懈的努力,找到了一个自动化截图的方案,在这个方案中,要实现自动化截图有三个关键点:uiautomator 自动化测试, accessibility 和 bash脚本。
uiautomator 是一个用部分封装代码将 UI 处理成一个 JUnit 测试用例的框架。这里需要注意的是:被测试的 App 里没有包含这些测试用例,因为他们在一个独立的进程中运行。换句话说,你可以把 uiautomator 框架看作一个独立的机器人,它能帮你在设备上完成诸如:点击,滚动,截图等简单动作。
预备知识
在继续讲解之前,我建议你花些时间阅读官方文档,这能帮助你更好地理解接下来的内容。
uiautomator 框架的 API 非常简单,里面有三个类分别代表了不同类型的 UI 界面元素:
UiObject: 基本界面元素,例如:TextView
UiCollection: 包含多个 UiObject 的界面元素,例如:LinearLayout
UiScrollable: 包含多个 UiObject ,并能滚动的界面元素,例如:ListView
框架里这两个类你也需要了解:
UiDevice:用于执行设备常见的动作,例如:点击按钮,截图等等
UiSelector:通过 id, 类型等获得屏幕上的 UI 界面元素
最后,UiAutomatorTestCase 是框架里你绝对不能忽略的类,因为我们必须通过继承它来获得一个 uiautomator 测试用例。
当然了,我刚刚提到的这些类在官方文档里面都有详细的解释,此外,文档还提供了一些示例来帮助我们熟悉 uiautomator 。
安装,创建和运行
接下来我们要做的就是创建 uiautomator ,但很不幸,uiautomator 并没有一个官方的 Gradle 整合模块,所以我们必须自己去完成这项工作。把这些工作都完成后,才能在我们的 App 上使用 uiautomator。uiautomator 测试用例的最终输出应该是一个独立的 JAR 包。具体步骤如下:
在你的项目里新建一个 Gradle 模块,并在其中添加与 local.properties 相同的 android.jar 依赖包:
.build.gradle
apply plugin: 'java'
Properties props = new Properties()
props.load(new FileInputStream(file("../local.properties")))
dependencies {
compile fileTree(dir: props['sdk.dir'] + '/platforms/' + androidSdkTarget, include: '*.jar')
}
通过使用 local.properties 和 gradle.properties 新建一个 ant 文件,使其获得与项目相同的配置信息(target, sdk path):
build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="uiautomator" default="help">
<loadproperties srcFile="../local.properties" />
<loadproperties srcFile="gradle.properties" />
<property name="target" value="${androidSdkTarget}" />
<import file="${sdk.dir}/tools/ant/uibuild.xml" />
</project>
使用ant 构建JAR(不要使用Gradle构建),并把它加到你的设备中,然后运行你的测试用例。
$ ant build
$ adb push uiautomator.jar data/local/tmp
$ adb shell uiautomator runtest uiautomator.jar -c com.your.TestCase
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。