该文为 macaca 的 python 版本
macaca python 版本 https://github.com/macacajs/wd.py

一 基本环境安装

macaca 相关基础

1.1 安装配置 Oracle java

下载地址 http://www.oracle.com/technetwork/java/javase/downloads/index.html
找到合适的 java 版本下载,我选择的是 jdk-8u121-windows-x64.exe。按步骤安装即可。安装路径一般默认。

配置 java 环境变量:
JAVA_HOME 变量值为 JDK 的安装目录,笔者为 C:\Program Files\Java\jdk1.8.0_121
PATH PATH 变量值后追加 ;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
CLASSPATH 变量值为 ;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

检查是否安装成功

C:\Users\cmd>java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)

1.2 安装配置 Android SDK

下载地址 http://tools.android-studio.org/index.php/sdk 处下载 android-sdk_r24.4.1-windows.zip
将 android-sdk-windows 解压到你需要的目录下,笔者是 D:\Android\android-sdk-windows

配置 android-sdk 环境变量:
ANDROID_HOME 变量值为 android-sdk 的解压目录,笔者为 D:\Android\android-sdk-windows
PATH PATH 变量值的最后追加 ;%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\build-tools;

接下来你便可以用 D:\Android\android-sdk-windows 下的 SDK Manager.exe 下载配置 SDK 或 AVD Manager.exe 配置 AVD 模拟器了。
此处不多讲了,如果你需要测试 macaca 支持的 android 应用的话,请先安装配置好某一版本的 SDK 及其相关工具。

win10 测试安卓应用的话目前我的配置是:


关于 Android 开发环境的大家可以参考此人的博客

Android SDK Manager 和 AVD Manager 使用

Android 开发环境配置

AVD 模拟器有些慢,我一般用的都是 Genymotion 请参考http://www.iplaysoft.com/genymotion.html 自行安装配置。

1.3 安装配置 nodejs

1.3.1 安装 nodejsv6.10.0 LTS 稳定版

去官网 https://nodejs.org/en/ 下载 v6.10.0 LTS 这个稳定版本,也就是 node-v6.10.0-x64.msi 这个。
然后安装到本地 D:\nodejs
刚安装完是这样的版本

 C:\Users\cmd>node -v
v6.10.0

C:\Users\cmd>npm -v
3.10.10

PS:node 的版本最好就用 LTS 这个长期技术支持稳定版本,其他版本会有问题。
npm 的版本无所谓,你升级到最新的 npm 3.10.10 弄 macaca 也不会有什么问题。

1.3.2 添加 PATH 环境变量

追加到 PATH 之后便可以了,D:\nodejs;D:\nodejs\node-global

1.3.3 nodejs 的配置设置

去 D:\nodejs\目录下,新建 node-global 和 node-cache。先看下 如果已经有了 就不用再新建了。


C:\Users\cmd>npm config set prefix "D:\nodejs\node-global"
C:\Users\cmd>npm config set cache "D:\nodejs\node-cache"

检查下是否设置成功

C:\Users\cmd>npm config get prefix
     D:\nodejs\node-global
C:\Users\cmd>npm config get cache
      D:\nodejs\node-cache

再检查下安装源,我应该所有的安装源都是 taobao.org,安装源有问题的话

 npm config set  registry http://registry.npm.taobao.org
C:\Users\cmd>npm config get registry
     http://registry.npm.taobao.org

PS: 推荐尽量用国内的淘宝镜像源,因为你懂得的原因某些组件需要国外服务器下载,下载会失败导致 macaca 相关安装失败。

1.4 安装配置 gradle

macaca 最新的采用了 gradle 来构建和部署(以前有依赖 Apache ant 构建)。所以我们需要安装配置 gradle。
详见官方帮助 https://gradle.org/install 来部署安装好 gradle。

见到如下输出就说明 gradle 配置正确了:
win10 如下

C:\Users\cmd>gradle -v

------------------------------------------------------------
Gradle 3.5
------------------------------------------------------------

Build time:   2017-04-10 13:37:25 UTC
Revision:     b762622a185d59ce0cfc9cbc6ab5dd22469e18a6

Groovy:       2.4.10
Ant:          Apache Ant(TM) version 1.9.6 compiled on June 29 2015
JVM:          1.8.0_121 (Oracle Corporation 25.121-b13)
OS:           Windows 10 10.0 amd64

1.5 安装 macaca 相关

然后就是安装 macaca-cli 和各种 macaca 驱动
npm i macaca-cli -g
npm i macaca-electron -g
npm i macaca-chrome -g
npm i macaca-android -g

最后 macaca doctor 检查环境

C:\Users\cmd>macaca doctor

  macaca-doctor version: 2.0.2


  Node.js checklist:

  node env: D:\nodejs\node.exe
  node version: v6.10.0

  Android checklist:

  JAVA version is `1.8.0_121`
  JAVA_HOME is set to `C:\Program Files\Java\jdk1.8.0_121`
  ANDROID_HOME is set to `D:\Android\android-sdk-windows`
  Platforms is set to `D:\Android\android-sdk-windows\platforms\android-25`
  ADB tool is set to `D:\Android\android-sdk-windows\platform-tools\adb.exe`
  GRADLE_HOME is set to `D:\gradle-3.5`

  Installed driver list:

  android: 2.0.36
  chrome: 1.0.6
  electron: 1.1.11

python 相关基础

官网下载最新的 python3 我下的是 python-3.6.2.exe 直接安装。
设置环境变量
PATH PATH 变量值后追加 D:\python\;D:\python\Scripts

检查 python -v 查看是否安装正确 后 exit() 退出 python 环境

二 sample-python 样例

2.1 下载样例

D:\>cd macaca

D:\macaca>git clone https://github.com/macaca-sample/sample-python

2.2 安装 Macaca Python Client

地址 https://pypi.python.org/pypi/wd 也可如下命令安装

D:\macaca\sample-python\tests>python -m pip install wd
Collecting wd
  Downloading wd-0.1.10-py3-none-any.whl
Requirement already satisfied: retrying in d:\python\lib\site-packages (from wd)
Requirement already satisfied: enum34 in d:\python\lib\site-packages (from wd)
Requirement already satisfied: requests in d:\python\lib\site-packages (from wd)
Requirement already satisfied: six>=1.7.0 in d:\python\lib\site-packages (from retrying->wd)
Installing collected packages: wd
Successfully installed wd-0.1.10

2.3 在安装下样例依赖
这步应该和上步骤重复都是 wd.py 环境安装,您可选择一种方式

D:\macaca\sample-python>pip install -r requirements.txt
Requirement already satisfied: wd in d:\python\lib\site-packages (from -r requirements.txt (line 1))
Requirement already satisfied: retrying in d:\python\lib\site-packages (from -r requirements.txt (line 2))
Requirement already satisfied: requests in d:\python\lib\site-packages (from wd->-r requirements.txt (line 1))
Requirement already satisfied: enum34 in d:\python\lib\site-packages (from wd->-r requirements.txt (line 1))
Requirement already satisfied: six>=1.7.0 in d:\python\lib\site-packages (from retrying->-r requirements.txt (line 2))
Cache entry deserialization failed, entry ignored

三 执行样例

3.1 启动 macaca server

C:\Users\cmd>macaca server -p 3456 --verbose
>> index.js:18:12 [master] pid:18312 webdriver server start with config:
 { port: 3456,
  verbose: true,
  always: true,
  ip: '*.*.68.*',
  host: 'cmd',
  loaded_time: '2017-09-11 14:33:28' }
>> middlewares.js:17:10 [master] pid:18312 base middlewares attached
>> router.js:127:10 [master] pid:18312 router set
>> webdriver sdk launched

3.2 命令执行测试脚本

D:\macaca\sample-python>python tests/macaca-desktop-sample.test.py
也可 继续 cd tests 到脚本目录 D:\macaca\sample-python\tests>下执行 python macaca-desktop-sample.test.py

desktop 依赖 electron

如果跑 android 脚本 需要启动一安卓模拟器比如 genymotion 再同理执行 D:\macaca\sample-python\tests>python macaca-android-sample.test.py

默认不改动的 macaca-android-sample.test.py 貌似有问题 python 执行命令行 会显示 Retry connecting server... 然后 macaca server 命令行一直在

>> start to download: https://npmcdn.com/android-app-bootstrap@latest/android_app_bootstrap/build/outputs/apk/android_app_bootstrap-debug.apk  

并无后续响应,停在这儿一直不走了。

单独访问该下载地址又是可以直接下载下来的,于是我将该段下载测试 apk 的代码 改为如下:即直接访问链接下载到本地某一位置。

desired_caps = {
    'platformName': 'android',
    'app': 'D:\\Install\\apk\\android_app_bootstrap-debug.apk',
    }

最后在执行 测试通过

最后再尝试新建一自家 apk 测试

import unittest
import os
import time
from macaca import WebDriver

desired_caps = {
    'platformName': 'android',
    'app': 'D:\\Install\\apk\\****.apk',
    'reuse': 3
}

server_url = {
    'hostname': 'localhost',
    'port': 3456
}


class MacacaTest(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.driver = WebDriver(desired_caps, server_url)
        cls.driver.init()

    @classmethod
    def tearDownClass(cls):
        cls.driver.quit()

    def test_01_login(self):

        self.driver \
            .element_by_id('com.acp.main:id/tvBottomTab4') \
            .click()

        time.sleep(5)

        self.driver\
            .element_by_id('com.acp.main:id/layoutLogin')\
            .click()

        time.sleep(5)

        self.driver\
            .element_by_id('com.acp.aicaitencent:id/etUserName')\
            .send_keys('********')

        time.sleep(5)

        self.driver\
            .element_by_id('com.acp.aicaitencent:id/etPwd')\
            .send_keys('*******')

        time.sleep(5)

        self.driver\
            .element_by_id('com.acp.aicaitencent:id/tvLogin')\
            .click()

        time.sleep(5)

if __name__ == '__main__':
    unittest.main()

测试通过

以上为本日 9 月 11 日中午休息 尝试 python 版本的 macaca 记录

更多信息请参考 wiki 汇总

小马的 macaca 入门指引合集


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