Macaca MacOs 环境安装配置 macaca 总结记

小马 · November 29, 2016 · Last by 小马 replied at March 21, 2018 · 4168 hits

由于公司有ios下的APP自动化测试需求,所以在虚拟机Mac环境下鼓捣了下macaca的安装配置

一 安装配置MacOS虚拟机


OS X EI Capitan 10.11.4版本

链接:http://pan.baidu.com/s/1dFtA3C1 密码:fs9c

用的是最新的VMware Workstation Pro 12.5.2

安装图文参考

http://m.blog.csdn.net/article/details?id=51050770

unlocker208下载地址

http://download.csdn.net/detail/cekiasoo/9480282

照着以上弄就可以了,都是正确的做法。

设置虚拟机macos联网

在安装MacOS时候,选择的是桥接方式,但安装完vmtools重启后,发现并不能在公司局域网环境联网

于是参考http://www.07net01.com/linux/2016/01/1178321.html

参考以上设置这里为公司网关地址

打开VMware Workstation Pro 编辑菜单里的“虚拟网络编辑器”修改如下

标红处改为你所在局域网的网关地址即可

然后在你安装好的MacOS虚拟机设置里

二安装配置JAVA

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

下载jdk-8u111-macosx-x64.dmg

双击安装好后,执行java -version 显示是可以的

vmacdeMac:~ vmac$ java -version
java version "1.8.0_111"Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)

但还是要继续配置JAVA_HOME环境变量,否则macaca doctor会报错

配置JAVA_HOME环境变量

sudo vim /etc/profile

末尾追加

#Java Environment Path
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

三安装配置xcode7.3.1

Xcode7.3.1
下载链接:http://pan.baidu.com/s/1o8nHisU 密码:305h

虚拟机MacOS的设置里设置文件夹共享,将下载的Xcode_7.3.1.dmg放入共享文件夹下。

双击下载好的Xcode_7.3.1.dmg,选中xcode图标拖拽至右侧的Applications 即可进行复制安装。

否则双击xcode图标启动的是类似虚拟镜像的xcode。

四安装配置macaca相关

nodejs下载 https://nodejs.org/en/download/

pkg包方式node-v6.9.1.pkg

双击下载好的pkg即可自行安装,安装好后,我们来看下相关默认配置

vmacdeMac:~ vmac$ node -v
v6.9.1
vmacdeMac:~ vmac$ npm -v
3.10.8
vmacdeMac:~ vmac$ npm config get prefix
/usr/local
vmacdeMac:~ vmac$ npm config get cache
/Users/vmac/.npm
vmacdeMac:~ vmac$ npm config set registry http://registry.npm.taobao.org
vmacdeMac:~ vmac$ npm config get registry
http://registry.npm.taobao.org/

第一次安装不带sudo 报了权限错误

带了sudo 安装后 执行macaca -v 也报了权限错误

然后卸载掉sudo npm uninstall macaca-cli -g

设置下该目录的权限为当前登录账号

sudo chown $USER /usr/local/lib/node_modules

过程如下:

再直接用npm i macaca-cli -g正常

然后安装了驱动 npm i macaca-ios -g

npm i macaca-electron -g

觉的这种方式总有权限问题,所以最后我卸载掉该pkg选择了如下的tar包安装方式,这种方式的好处是,绿色,安全,更新维护方便。

建议你也选择tar包的安装方式。

tar包方式 node-v6.9.1-darwin-x64.tar

解压到目录/Users/vmac/nodejs 重命名为nodejs

配置nodejs环境变量

sudo vim /etc/profile

末尾追加

#Nodejs Environment Path
export PATH=$PATH:/Users/vmac/nodejs/bin

source /etc/profile

过程如下:

如此便利用tar包安装完nodejs,安装好后,我们来看下相关默认配置

vmac$ node -v
v6.9.1

vmac$ npm -v
3.10.8

vmac$ npm config get prefix
/Users/vmac/nodejs

vmac$ npm config get cache
/Users/vmac/.npm

vmac$ npm config get registry
https://registry.npmjs.org/

vmac$ npm config set registry http://registry.npm.taobao.org

vmac$ npm config get registry
http://registry.npm.taobao.org/

然后直接用npm i macaca-cli -g 安装正常

然后安装了驱动 npm i macaca-ios -g

npm i macaca-electron -g

五安装配置android环境

下载地址 http://tools.android-studio.org/index.php/sdk

下载 android-sdk_r24.4.1-macosx.zip 解压到

/Users/vmac/android-sdk-macosx

配置ANDROID_HOME环境变量

sudo vim /etc/profile

末尾追加

#Android-sdk-macosx Path
export ANDROID_HOME=/Users/vmac/android-sdk-macosx
export PATH=$PATH::$ANDROID_HOME/tools/:$ANDROID_HOME/platform-tools

source /etc/profile

cd /Users/vmac/android-sdk-macosx/tools

./android 启动sdk manager下载所需的相关tools和avd虚拟机

我们需要改下下载的地址为mirrors.neusoft.edu.cn

然后下载如图所示的相关工具

我们执行下macaca doctor 看下还缺什么

然后再安装npm i macaca-android -g 就正常了

六安装配置homebrew

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
vmacdeMac:~ vmac$ brew -v
Homebrew 1.1.2
Homebrew/homebrew-core (git revision a06e; last commit 2016-11-29)

安装 ios-webkit-debug-proxy

看到macaca doctor 红色的还缺少,那我们来用brew安装 ios-webkit-debug-proxy

brew install ios-webkit-debug-proxy

接下来我们再来看看macaca doctor

全线飘绿。

打完收工,其他的请参考社区内其他帖子。
比如:

Macaca iOS 驱动调整为 USB 通信

Macaca 已支持自动设置开发者信息

Macaca iOS 真机测试

七 app-inspector真机查看元素设置

7.1 查找 DEVELOPMENT_TEAM_ID

打开任意 xcode 工程,选择 team,我打开的是上一步安装的macaca-ios驱动工程下的 webdriverclient的WebDriverAgentRunner ,然后选择 Build Settings ,然后找到Development Team 点击其下右侧的other,找到下图的 TEAM_ID。TEAM_ID是一个10位数字字母组成的字符串.

(如果你首次打开且未登录Apple ID账号的话,此处应该是没有账号的,你可以去xcode工具栏,xcode->Preferences 下的Accounts栏下添加下您的Apple ID,这样xcode就会为您生成一个您的TEAM_ID)

7.2 重新安装app-inspector即可,通过环境变量将TEAM_ID 传进去

如果之前已经安装过app-inspector 请先卸载并清理干净再安装,如下命令

npm uninstall app-inspector -g

npm cache clean

DEVELOPMENT_TEAM_ID=********** npm i app-inspector -g

7.3 修改app-inspector下的webdriveragent 下的Product Bundle identifier

需要修改上步安装好的app-inspector下的webdriveragent 具体路径见下图红框
需要修改的有 WebDeriverAgentLib 和WebDriverAgentRunner 下的Product Bundle identifier
改为你自己的账号.

这个账号类似如下图:
由于WebDeriverAgent这东西是facebook开发并签名发布的,这是一种mac系开发的签名安全认证机制,所以我们要本地运行它的话要保证和本地账号权限一致,我们修改为了
自己的账号后便有了可以运行它的权限了.这个账号是类似这样的 ,这是我修改后的,有人问怎么改,我不清楚,反正你用你的apple id 添加到xcode->Preferences 下的Accounts,然后 在Accounts->View Details->iOS Development->Create 如此便创建iOS Development Singing Identities该账号了。

如上步骤,接下来就是
连接上你的iphone手机,再在xcode中windows->Devices找到你设备的identifier 复制下来

然后便是

app-inspector -u  youridentifier

这时会自动向您的手机安装webdriveragent ,看到安装图标后,您还需要在你的手机设置->通用 找到设备管理添加下该webdriveragent的信任,然后停掉当前命令,再次启动app-inspector -u youridentifier 即可正常安装成功,并自动打开浏览器进行元素查看.

八 macaca-ios驱动连接真机设置

8.1 安装 usbmuxd

由于macaca-ios的升级,我们还需要安装usbmuxd
请参考 Macaca iOS 驱动调整为 USB 通信

brew install usbmuxd

8.2 同7.1步,找到TEAM_ID

8.3 重新安装macaca-ios即可,通过环境变量将TEAM_ID 传进去

如果之前已经安装过macaca-ios 请先卸载并清理干净再安装,如下命令

npm uninstall macaca-ios -g

npm cache clean

DEVELOPMENT_TEAM_ID=********** npm i macaca-ios -g

8.4 修改macaca-ios下的webdriveragent 下的Product Bundle identifier

需要修改上步安装好的macaca-ios下的webdriveragent 具体路径见下图红框
需要修改的有 WebDeriverAgentLib 和WebDriverAgentRunner 下的Product Bundle identifier
改为你自己的账号

接下来就可以真机跑脚本了,略.

期间 mvn macaca java工程该传递的ios参数都写了 可还是运行期间报了错,如下:

macaca server --verbose
>> request.js:24:12 [master] pid:6284 get remote update info failed.
>> index.js:17:12 [master] pid:6285 webdriver server start with config:
{ port: 3456,
verbose: true,
always: true,
ip: '192.168.66.87',
host: 'Mac-macacadeiMac.local',
loaded_time: '2017-01-22 10:09:32' }
>> middlewares.js:17:10 [master] pid:6285 base middlewares attached
>> router.js:127:10 [master] pid:6285 router set
>> webdriver sdk launched
^[[A>> responseHandler.js:11:12 [master] pid:6285 Recieve HTTP Request from Client: method: POST url: /wd/hub/session, jsonBody: {"desiredCapabilities":{"app":"/Users/macaca/svn/macacadev/HuaShengUI/app/HuashengSecurities.ipa.zip","reuse":"3","bundleId":"com.***.***","javascriptEnabled":true,"platformName":"IOS","udid":"************************************","version":"10.2","deviceName":"iPhone 6","autoAcceptAlerts":true},"port":3456,"host":"127.0.0.1"}
>> session.js:47:10 [master] pid:6285 Creating session, sessionId: e18cc523-aeee-4fac-85e9-acb87fa45462.
ios-deploy
>> helper.js:194:12 [master] pid:6285 Unzipping local app form /Users/macaca/svn/macacadev/HuaShengUI/app/HuashengSecurities.ipa.zip
>> responseHandler.js:54:12 [master] pid:6285 Send Error Respone to Client: Error: spawn ios-deploy ENOENT
>> responseHandler.js:60:14 [master] pid:6285 Error: spawn ios-deploy ENOENT
at exports._errnoException (util.js:1022:11)
at Process.ChildProcess._handle.onexit (internal/child_process.js:193:32)
at onErrorNT (internal/child_process.js:359:16)
at _combinedTickCallback (internal/process/next_tick.js:74:11)
at process._tickCallback (internal/process/next_tick.js:98:9)

Error: spawn ios-deploy ENOENT
at exports._errnoException (util.js:1022:11)
at Process.ChildProcess._handle.onexit (internal/child_process.js:193:32)
at onErrorNT (internal/child_process.js:359:16)
at _combinedTickCallback (internal/process/next_tick.js:74:11)
at process._tickCallback (internal/process/next_tick.js:98:9)

最后安装了下 ios-deploy 就好了

安装命令:

brew install ios-deploy

希望以上对大家测试ios真机有帮助。

更多信息请参考wiki汇总

小马的macaca入门指引合集
Macaca Ios 真机调试文档

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 13 条回复 时间 点赞

Hi,

I configured all these settings , but it is not showing the installed driver list when running command as "macaca doctor"


博主,这里一直卡在这了。。。怎么解决啊?谢谢!

#2楼 @tfzhou 不知道 你再说什么 请具体描述下你的问题

#3楼 @harsayer
执行到这里了,
1.真机跑脚本,怎么弄?
2.终端直接输入macaca server --verbose,就出现上面那个情况了。

#4楼 @tfzhou 你的macaca 脚本 是java 还是nodejs 还是python版本的啊 你的截图 我没看出来macaca server报什么错了。
参考 https://testerhome.com/wiki/macaca   先去把自己的脚本项目鼓捣好  先调试好样例项目 真机跑下样例项目

小马 关于 Macaca 的并发测试 (iOS) 中提及了此贴 20 Feb 09:50
小马 macaca 启动 app-inspector 问题求助 中提及了此贴 09 Mar 14:34

请问你的qq多少,我有点问题想咨询下

tfzhou 回复

你好请问在么

我操作第七部分
我按了create之后,什么都没有发生,如图
,请问谁遇过类似情况,如何解决

小马 Macaca iOS 真机实战 中提及了此贴 23 Mar 16:49
和曦 [公告] App Inspector 重磅升级 中提及了此贴 05 Apr 16:24

@harsayer 您好,我遇到一个app-inspector无法正常工作的问题,
Log可详参https://testerhome.com/topics/5808 #104楼
可以帮忙看看吗,谢谢!

@harsayer ,求帮忙🙏
补充信息如下:
虚拟机里可以跑成功,真机不行。

跑模拟器Xcode Debug的log:

2017-04-06 13:47:40.352 XCTRunner[4833:113945] Running tests...
2017-04-06 13:47:48.499 XCTRunner[4833:113945] Continuing to run tests in the background with task ID 1
Test Suite 'All tests' started at 2017-04-06 13:47:48.672
Test Suite 'WebDriverAgentLib.framework' started at 2017-04-06 13:47:48.674
Test Suite 'WebDriverAgentLib.framework' passed at 2017-04-06 13:47:48.674.
Executed 0 tests, with 0 failures (0 unexpected) in 0.000 (0.001) seconds
Test Suite 'WebDriverAgentRunner.xctest' started at 2017-04-06 13:47:48.676
Test Suite 'UITestingUITests' started at 2017-04-06 13:47:48.677
Test Case '-[UITestingUITests testRunner]' started.
t = 0.00s Start Test at 2017-04-06 13:47:48.678
t = 0.00s Set Up
2017-04-06 13:47:48.685 XCTRunner[4833:113945] Built at Apr 6 2017 11:53:41
2017-04-06 13:47:48.705 XCTRunner[4833:113945] ServerURLHere->http://192.168.199.187:8100<-ServerURLHere
t = 47.95s Find the Application "local.pid.4769" 0x6080002a69c0
t = 47.95s Snapshot accessibility hierarchy for local.pid.4769

本地访问server后返回:

{
"value" : "Unhandled endpoint: \/ -- http:\/\/192.168.199.187:8100\/ with parameters {\n wildcards = (\n \"\"\n );\n}",
"sessionId" : "41A81AA0-6090-4419-9D81-C1EFA27ACD59",
"status" : 1
}

本地访问status返回:

{
"value" : {
"state" : "success",
"os" : {
"name" : "iOS",
"version" : "10.3"
},
"ios" : {
"simulatorVersion" : "10.3",
"ip" : "192.168.199.187"
},
"build" : {
"time" : "Apr 6 2017 11:53:42"
}
},
"sessionId" : "41A81AA0-6090-4419-9D81-C1EFA27ACD59",
"status" : 0
}

本地访问inspector截图:

跑真机时Xcode Debug的Log:

dyld: Library not loaded: @rpath/XCTest.framework/XCTest
Referenced from: /var/containers/Bundle/Application/67D95C0C-0253-4654-A88B-1C646458E939/WebDriverAgentRunner-Runner.app/XCTRunner
Reason: no suitable image found. Did find:
/private/var/containers/Bundle/Application/67D95C0C-0253-4654-A88B-1C646458E939/WebDriverAgentRunner-Runner.app/Frameworks/XCTest.framework/XCTest: code signing blocked mmap() of '/private/var/containers/Bundle/Application/67D95C0C-0253-4654-A88B-1C646458E939/WebDriverAgentRunner-Runner.app/Frameworks/XCTest.framework/XCTest'
/private/var/containers/Bundle/Application/67D95C0C-0253-4654-A88B-1C646458E939/WebDriverAgentRunner-Runner.app/Frameworks/XCTest.framework/XCTest: code signing blocked mmap() of '/private/var/containers/Bundle/Application/67D95C0C-0253-4654-A88B-1C646458E939/WebDriverAgentRunner-Runner.app/Frameworks/XCTest.framework/XCTest'
(lldb)

试过很多方法,现在怀疑是Xcode的问题
虽然我的Xcode从8.2.1升级到了8.3,iOS从10.0.2升级到了10.3和10.3.1,但都没有解决:(
https://github.com/facebook/WebDriverAgent/issues/429
https://github.com/facebook/WebDriverAgent/issues/521

现在我该怎么办?

小马 执行 macaca 测试过程中提示错误,求助 中提及了此贴 11 May 17:56


一直卡在这里,也不报错,咋回事

笑哼 回复

请不要用sudo 仔细看文中推荐的tar包安装node的方式,和相关目录的权限设置 都是用的普通登录账号和相关rwx权限。

小马 #18 · March 21, 2018 作者

最新的 出来了
https://testerhome.com/topics/12428
你们看这个吧.....

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up