0. 引子

将两者结合起来,就可以在 PC 端实现快速编程来完成自动化操控。优点就是快,编程简单,对于一些需要快速完成自动化的临时任务场景比较适用;缺点就是脚本通用性差,这也是基于图像的自动化(如 Monkeyrunner 等)的通病,还有就是当它运行的时候,PC 几乎不能用来做其他事情。另外 Silukix 也可以用在 PC 端的其它 GUI 自动化:exe,浏览器等。

1. 安装

SikuliX 安装

SikuliX 的安装稍微有点复杂,需要先从官网下载页面下载安装引导的 jar,然后通过引导来自动在线下载所需要的包来完成安装:[2]

  1. 下载sikuli-setup.jar,放入一个空目录例如 SikuliX(个人建议:Windows 下不要使用含中文或者空格的路径是一个好习惯);
  2. 双击执行 sikulixsetup~.jar ,或者使用命令 java -jar sikulixsetup....jar来打开安装引界面。在这里设置你准备使用的语言 Python or Ruby、IDE、ORC 识别的 features、代理,特别需要注意的是代理,会影响到后面安装文件的下载。不清楚的内容可以点 H 看帮助; 设置界面图片
  3. 完成设置后,点击 Setup Now 按钮开始下载,如果一切顺利下载下来后你将会在 Setup 目录里看到:
  4. 如果你需要手动下载,则先建立 Setup 目录并从 http://nightly.sikuli.de/ 下载第 3 步中的文件,然后打开 sikulixsetup~.jar ,它会提示你文件已经存在,是重新下载还是跳过使用本地文件;
  5. 按照 Step by step 操作下来,如果没有问题就会提示你安装成功了。如果失败,就看看 SetupLog.txt 里面是什么错误,再针对解决;
  6. 安装完成后就可以使用 runsikulix.cmd 来启动 SikuliX 了。

Mobizen 安装

Mobizen 分为手机端和 PC 端两部分,分别下载安装即可。

  1. 官网下载地址下载 PC 端安装包安装。
  2. Google Play 下载 APK 安装包在手机上安装。如果没有梯子,也可以在 CoolAPK 上下载。
  3. 打开手机端 Mobizen, 按照提示注册一个账号,这个账号将用来确认连接。手机客户端可以设置连接方式等内容。
  4. 打开 PC 端 Mobizen,输入账号和密码,完成连接。此过程可能会要求下载驱动、手机出现录屏等各种提示,请适当操作即可。

 

2. 自动化实现

  1. 通过 Mobizen 连接手机,验证一下通过鼠标可以进行操作并能得到反馈。(打脸的是,刚才我在自己的手机上失败了,只能看不能摸,估计是 Android 5.1 的限制。)

    模拟器

    Mobizen 的在这里的功能也仅仅只是连接手机并进行操作,目前连接不上也找不到合适的手机了,所以下面就只用模拟器演示一下 SikuliX,如果你可以用 Mobizen 连接手机,你应该可以完成这一套方案。
    以下请脑补成我的模拟器就是 Mobizen 连接的真机

  2. 打开 SikuliXIDE,编写测试脚本,以 ApiDemo 为例:

    Sikuli代码

    通过左侧的各种函数可以直观地完成各种查找和操作,可查阅这方面的资料,上手很容易。

  3. 一些 Tips:

  4. 执行测试:
    点击运行就开始执行了。需要注意的是,执行的时候 SikuliX 界面会自动隐藏,因此如果你有各种输出,暂时是不可见的,log 或者数据建议写入文件。执行的时候,随时可以按快捷键 Alt+Shift+C 来终止。
    执行

  5. 结果:
    很遗憾,结果只能依靠自己的代码来输出,这里并没有什么内置的报告模块。

  6. Demo 代码(其实没有图片就没有什么 X 用):

# Sikulix + Mobizen demo #20150925

def hello_demo():
    if not exists("1443166848804.png"):
        # 进行错误处理
        return -1;
    click("1443166848804.png")
    wait("1443166987065.png", 5) # 等待目标出现,设置5秒超时
    click("1443167235874.png")
    sleep(1) # 使用真机需要稍微大一点的延时以保证成功率
    click("1443167266728.png")
    # 可以使用 exists 方法来进行断言
    assert exists("1443167432886.png")
    # 或者 if 判断
    if exists("1443167432886.png"):
        print('OK')
    else:
        print('Failed')
    # 直接用python执行adb命令
    import os
    os.system('%adb% shell am force-stop com.example.android.apis')
    sleep(1)
    assert exists("1443167805504.png")

if __name__ == '__main__':
    hello_demo()


↙↙↙阅读原文可查看相关链接,并与作者交流