1、安装brew 软件包管理工具:/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

2、安装nodejs  :brew install node  安装完node 后需要设置通过npm安装的软件包放置位置设置为可以读写权限,chmod -R 777 /usr/local/lib/node_modules/  (注:在操作时时测试机器,赋给777权限没有问题,如果是其他机器,需要考虑是否给了不该给的权限)    其中 /usr/local/ 可以通过npm config get prefix 获得,这样会省去一些权限的问题。

3、安装macaca 参考官网:https://macacajs.github.io/environment-setup

4、安装macaca inspect :npm i app-inspector -g

  安装完后进入目录:/usr/local/lib/node_modules/app-inspector/node_modules/webdriveragent/WebDriverAgent,

  在这个目录下面新建一个文件夹并执行下命令

  mkdir -p Resources/WebDriverAgent.bundle

  sh ./Scripts/bootstrap.sh -d

用xcode 打开WebDriverAgent.xcodeproj文件,对项目文件进行重新编译,

  编译:WebDriverAgentLib编译选项

  修改Bundle id,Team选为登录xcode的appid,

编译:WebDriverAgentRunner

每个编译一定要出现succeeded才行

编译完成,就可以启动macaca inspector 命令:app-inspector --port 56789 -u f9b87274e2a24b310399ddxxxxxx

启动后再浏览器中输入localhost:56789 访问,(实际端口以执行命令显示为准),手机会安装一个程序,需要手动点击这个名为:WebDriverAgentRunner的app, 会提示要在设置中信任改开发者开发的软件,进入手机>设置>通用>设备管理 >开发者应用 >信任WebDriverAgentRunner

再次安装执行命令:

app-inspector --port 56789 -u f9b87274e2a24b310399dd56dd80f8561d99fdac --verbose

提示出错误:xctest client exit with code: 65

>> xctest-client.js:181:14 [master] pid:33863 xctest client exit with code: 65, signal: null

>> xctest-client.js:145:16 [master] pid:33863 deviceconsole exit with code: null, signal: SIGKILL

>> xctest-client.js:255:14 [master] pid:33863 Fail to start xctest: undefined

>> app-inspector:66:44 [master] pid:33863 undefined

解决办法:在xcode 中编译下:WebDriverAgentUSBClient

再删除手机上的WDA,重复启动下

app-inspector --port 56789 -u f9b87274e2a24b310399dd56dd80f8561d99fdac --verbose

在再手机中信任开发者。就可以了,这个问题是签名问题

又由于macaca inspector 无法查看所有的元素,只有通过代码获取运行时xml页面元素布局   获取xml内容方法为:System.out.println(driver.getPageSource());

获取如下,有了这个xml文件内容,就能根据实际内容得到xpath  name 登录内容,完美解决元素查找问题

<?xml version="1.0" encoding="UTF-8"?><AppiumAUT><XCUIElementTypeApplication type="XCUIElementTypeApplication" name="xxxx" label="xxxx" visible="true" enabled="true" x="0" y="0" width="414" height="736">
<XCUIElementTypeWindow type="XCUIElementTypeWindow" visible="true" enabled="true" x="0" y="0" width="414" height="736">
<XCUIElementTypeOther type="XCUIElementTypeOther" visible="true" enabled="true" x="0" y="0" width="414" height="736">
<XCUIElementTypeOther type="XCUIElementTypeOther" visible="true" enabled="true" x="0" y="0" width="414" height="736">
<XCUIElementTypeOther type="XCUIElementTypeOther" visible="true" enabled="true" x="0" y="0" width="414" height="736">
<XCUIElementTypeOther type="XCUIElementTypeOther" visible="true" enabled="true" x="0" y="0" width="414" height="736">
<XCUIElementTypeNavigationBar type="XCUIElementTypeNavigationBar" name="我的xxxx" visible="true" enabled="true" x="0" y="20" width="414" height="44">
<XCUIElementTypeButton type="XCUIElementTypeButton" visible="true" enabled="true" x="12" y="26" width="41" height="30"/>
<XCUIElementTypeButton type="XCUIElementTypeButton" name="返回" label="返回" visible="true" enabled="true" x="12" y="31" width="21" height="22"/>
<XCUIElementTypeStaticText type="XCUIElementTypeStaticText" value="我的xxxx" name="我的xxxx" label="我的xxxx" visible="true" enabled="true" x="170" y="28" width="74" height="27"/>
<XCUIElementTypeButton type="XCUIElementTypeButton" name="MyReceiveSearch" label="MyReceiveSearch" visible="true" enabled="true" x="367" y="29" width="27" height="25"/>
</XCUIElementTypeNavigationBar>
<XCUIElementTypeOther type="XCUIElementTypeOther" visible="true" enabled="true" x="0" y="0" width="414" height="736">
<XCUIElementTypeOther type="XCUIElementTypeOther" visible="true" enabled="true" x="0" y="0" width="414" height="736">
<XCUIElementTypeOther type="XCUIElementTypeOther" visible="true" enabled="true" x="0" y="64" width="414" height="672">
<XCUIElementTypeOther type="XCUIElementTypeOther" visible="true" enabled="true" x="0" y="64" width="414" height="57">
<XCUIElementTypeStaticText type="XCUIElementTypeStaticText" value="xxxx(0)" name="xxxx(0)" label="xxxx" visible="true" enabled="true" x="0" y="64" width="138" height="57"/>
<XCUIElementTypeStaticText type="XCUIElementTypeStaticText" value="xxxx(14)" name="xxxx14)" label="xxxx" visible="true" enabled="true" x="138" y="64" width="138" height="57"/>
<XCUIElementTypeStaticText type="XCUIElementTypeStaticText" value="xxxx(10)" name="xxxx(10)" label="xxxx" visible="true" enabled="true" x="276" y="64" width="138" height="57"/>
<XCUIElementTypeOther type="XCUIElementTypeOther" visible="true" enabled="true" x="0" y="117" width="138" height="4"/>
<XCUIElementTypeOther type="XCUIElementTypeOther" visible="true" enabled="true" x="0" y="120" width="414" height="1"/>
</XCUIElementTypeOther>
<XCUIElementTypeScrollView type="XCUIElementTypeScrollView" visible="true" enabled="true" x="0" y="120" width="414" height="616">
<XCUIElementTypeTable type="XCUIElementTypeTable" name="无更多记录" label="无更多记录" visible="true" enabled="true" x="0" y="120" width="414" height="616"/>
</XCUIElementTypeScrollView>
</XCUIElementTypeOther>
</XCUIElementTypeOther>
</XCUIElementTypeOther>
</XCUIElementTypeOther>
</XCUIElementTypeOther>
</XCUIElementTypeOther>
</XCUIElementTypeOther>
</XCUIElementTypeWindow>
<XCUIElementTypeWindow type="XCUIElementTypeWindow" visible="false" enabled="true" x="0" y="0" width="414" height="736">
<XCUIElementTypeOther type="XCUIElementTypeOther" visible="false" enabled="true" x="0" y="0" width="414" height="736"/>
</XCUIElementTypeWindow>
<XCUIElementTypeWindow type="XCUIElementTypeWindow" visible="true" enabled="true" x="0" y="0" width="414" height="736">
<XCUIElementTypeStatusBar type="XCUIElementTypeStatusBar" visible="true" enabled="true" x="0" y="0" width="414" height="20">
<XCUIElementTypeOther type="XCUIElementTypeOther" visible="false" enabled="true" x="0" y="0" width="414" height="20"/>
<XCUIElementTypeOther type="XCUIElementTypeOther" visible="true" enabled="true" x="0" y="0" width="414" height="20">
<XCUIElementTypeOther type="XCUIElementTypeOther" name="信号强度:5 格(共 5 格)" label="信号强度:5 格(共 5 格)" visible="true" enabled="true" x="6" y="0" width="34" height="20"/>
<XCUIElementTypeOther type="XCUIElementTypeOther" name="中国电信 网络" label="中国电信 网络" visible="true" enabled="true" x="43" y="0" width="50" height="20"/>
<XCUIElementTypeOther type="XCUIElementTypeOther" value="SSID" name="4G" label="4G" visible="true" enabled="true" x="102" y="0" width="17" height="20"/>
<XCUIElementTypeOther type="XCUIElementTypeOther" name="下午6:13" label="下午6:13" visible="true" enabled="true" x="184" y="0" width="51" height="20"/>
<XCUIElementTypeOther type="XCUIElementTypeOther" name="勿扰模式" label="勿扰模式" visible="true" enabled="true" x="343" y="0" width="9" height="20"/>
<XCUIElementTypeOther type="XCUIElementTypeOther" name="方向已锁定" label="方向已锁定" visible="true" enabled="true" x="358" y="0" width="12" height="20"/>
<XCUIElementTypeOther type="XCUIElementTypeOther" name="电池电量:100%, 使用交流电源" label="电池电量:100%, 使用交流电源" visible="true" enabled="true" x="376" y="0" width="33" height="20"/>
</XCUIElementTypeOther>
</XCUIElementTypeStatusBar>
</XCUIElementTypeWindow>
</XCUIElementTypeApplication></AppiumAUT>

mac 系统使用macaca inspector 获取iphone真机应用元素的更多相关文章

  1. iPhone 真机调试应用程序

    原文:http://blog.sina.com.cn/s/blog_68e753f70100r3w5.html 真机调试iphone应用程序 1.真机调试流程概述 1)       真机调试应用程序, ...

  2. Xcode证书破解 iphone真机部署

    Xcode证书破解 iphone真机部署 证书伪造: 先按照该教程的步骤添加证书.注意,原教程选择的是"系统"证书,这里我们用"登录"证书,切记. Xcode破 ...

  3. XCode - vmware虚拟机安装XCode进行iPhone真机调试

    1.vmware安装黑苹果,然后在appStore安装XCode http://blog.csdn.net/forgot2015/article/details/51104329 2.真机调试证书等申 ...

  4. XCode - 无法对iPhone真机调试的解决方法!

    OSX:10.14 XCode:10.1 真机:iPhone 4S 错误很多啊,并非编译错误,编译已经成功了,但是无法安装到真机,我真不理解啊!!由于真的没有想到能够解决,有的错误没有截图,先看部分错 ...

  5. 苹果IPhone真机开发调试

    需要 在苹果开发网站 加入真机的UDID, 并在Profile中勾选该手机

  6. Mac OSX下Appium驱动iPhone真机

    1.安装Xcode.Command Line Tools和Appium. 2.安装brew:/usr/bin/ruby -e "$(curl -fsSL https://raw.github ...

  7. iPhone真机测试Crash信息分析

    一.获取Crash Log的方式 在iOS开发过程,当应用已经打包,iPhone设备通过ipa的包安装应用后,在使用过程发现crash,那么如何获取crash日志呢,现提供如下四种获取crash日志的 ...

  8. iphone真机开发流程之--证书申请

    一.申请 1.进入ios开发者中心 http://www.apple.com.cn/developer/ios/index.html 2.点击登录 输入用户名和密码(前提:已经有Apple ID,且花 ...

  9. iPhone真机调试流程

    大致流程:绑定设置ID--绑定电脑---绑定appbundle ID mac----钥匙串----证书助理-----从证书机构请求颁发证书-----填写邮件----生成证书到桌面 数据线连接设备--- ...

随机推荐

  1. 自己动手写js分享插件 [支持https] (可以分享QQ空间,微信,新浪微博。。。)

    由于百度分享,jiathis 等分享插件在https下均会报错,就萌生了自己动手写一个分享插件的念头,其实实现起来一点都不难,以下代码都已在https网站运行通过,特附上以下代码:还请各位看官不吝赐教 ...

  2. zookeeper选举机制

    在上一篇文章中我们大致浏览了zookeeper的启动过程,并且提到在Zookeeper的启动过程中leader选举是非常重要而且最复杂的一个环节.那么什么是leader选举呢?zookeeper为什么 ...

  3. 什么是进程And线程

    原创 2015年02月01日 11:49:01   学习.net 时遇到了两个新词汇:进程和线程.书上的太深奥,就查了查资料,整合下,希望对大家有帮助. [比喻]:用手去抓苹果,很显然一根手指是不行, ...

  4. lua中遍历table的几种方式比较

    当我在工作中使用lua进行开发时,发现在lua中有4种方式遍历一个table,当然,从本质上来说其实都一样,只是形式不同,这四种方式分别是: for key, value in pairs(tbtes ...

  5. nose的setup和teardown

    参考:http://blog.csdn.net/linda1000/article/details/8533349 1.模块的setUp和tearDown def setUp(): print &qu ...

  6. Python 字符串前面加'r'

    在Python的string前面加上‘r’, 是为了告诉编译器这个string是个raw string,不要转意backslash '\' . 例如,\n 在raw string中,是两个字符,\和n ...

  7. 8个使用JavaScript展示图片解决方案

    1. JonDesign’s SmoothGallery 2.0 SmoothGallery demo 2. (E)2 Photo Gallery (E)2 Photo Gallery demo 3. ...

  8. Quartz.Net的使用(简单配置方法)定时任务框架

    Quartz.dll 安装nuget在线获取dll包管理器,从中获取最新版 Quartz.Net是一个定时任务框架,可以实现异常灵活的定时任务,开发人员只要编写少量的代码就可以实现“每隔1小时执行”. ...

  9. it-tidalwave-semantic-aux-1.0.13.jar下载

    今天来给大家分一下一下自己认为还是挺不错的jar包下载网址,it-tidalwave-semantic-aux-1.0.13.jar,作为java开发人员可能时时刻刻都在跟jar包打交道,即使这会用不 ...

  10. 使用PyQt4 designer时无法启动uic解决方案

    1.自己调用命令行 pyuic4 -o codeFile.py -x yourUIfile.ui 2.写一个批处理,每次双击就行了,跟你的源文件放在同一文件夹下 import os for root, ...