如何在 iOS 真机运行 Appium
使用 gui 启动的 appium 1.2.2 也会有这个问题,所以你要把 deviceconsole 复制到 /Applications/Appium.app/Contents/Resources/node_modules/appium/build/deviceconsole 下面。你自己的路径可能和我不一样,切记。
同意如果这个问题不解决, iOS 上的 真机 inspector 也打不开。

英文好的同学请移步官方文档 real-devices,
推荐自己边看边试验。
首先 Appium 支持 iOS 真机
以下条件必须满足:
- 苹果开发者账号和开发者证书
- 苹果设备,确保这个设备已经被配置为开发机器。怎么配置?
- 签名过的 .ipa 文件或者源代码
- A Mac with Xcode and the Xcode Command Line Developer Tools,有 xcode和xcode command line 的苹果系统。别来问我,windows 怎么测试 iOS 应用。
Provisioning Profile
再次强调真机需要有效的开发分发证书和开发的 Provisioning Profile。
你的应用需要签名。Appium 会参试使用 Fruitstrap 安装应用。
但是使用 xcode 安装到真机会方便很多。
运行
要指定真机运行有两种方式:
appium 启动的时候,指定 udid 和 app bundle
appium -U <udid> --app <path or bundle>或者在脚本里指定两个 desired capability
desired_capabilities={
'app':'com.xxx.iphone',
'udid':'70643e56c1b0f3c3132c44c87e433a48b5531ee6',
'platformName': 'iOS',
'deviceName': 'iPhone'
})
注意: 如果设备中未安装 app 可以指定 ipa 地址,如果安装了,
则指定 bundle ID。
所以对于第一种情况,代码可以这样写:
self.driver = webdriver.Remote(
command_executor='http://127.0.0.1:4723/wd/hub',
desired_capabilities={
'deviceName':'',
'platformName': 'iOS',
})
对于第二种情况,代码可以这样写:
app = "io.appium.TestApp"
self.driver = webdriver.Remote(
command_executor='http://127.0.0.1:4723/wd/hub',
desired_capabilities={
'deviceName':'',
'platformName': 'iOS',
'app': app,
'udid': 'cc6bcd6a94aeb8490924dd05c5b318bfbfafb3bb'
})
调试的思路
- 确保 UDID 的正确,是真机的 UDID。(20+ 字符串)
- 确保在模拟器上已经能运行无误了。
- 直接使用 Instruments 看看是否能在真机上运行。有些情况连 xcode 的 instruments 都不能在真机上调试,那更别谈 appium 了
- 确保运行 appium 用例前, instruments 没有启动过。看看有没有 instruments 的进程。
目前 1.2.2 的坑
目前 appium 1.2.2 上运行 ios 真机测试的话,可能会遇到如下的错误:
info: [debug] Starting iOS device log capture via deviceconsole
error: iOS log capture failed: spawn ENOENT
info: [debug] Cleaning up appium session
error: Failed to start an Appium session, err was: Error: spawn ENOENT
info: [debug] Error: spawn ENOENT
at errnoException (child_process.js:1000:11)
at Process.ChildProcess._handle.onexit (child_process.js:791:34)
info: [debug] Responding to client with error: {"status":33,"value":{"message":"A new session could not be created. (Original error: spawn ENOENT)","code":"ENOENT","errno":"ENOENT","syscall":"spawn","origValue":"spawn ENOENT"},"sessionId":null}
info: <-- POST /wd/hub/session 500 1780.745 ms - 197
这是因为在 /usr/local/lib/node_modules/appium/build/deviceconsole/ 下面缺失了 deviceconsole。已经有 bug 追踪了。
解决方法如下:
- 到该目录底下
cd /usr/local/lib/node_modules/appium/build/deviceconsole/ - 打开这个deviceconsole project。
open deviceconsole.xcodeproj - 重新 build 一把。把 build 出来的 deviceconsole,复制到
/usr/local/lib/node_modules/appium/build/deviceconsole/去。 - 然后重新运行 Appium
注意: deviceName 就算为空也一定要,代码写死的。。。
如何在 iOS 真机运行 Appium的更多相关文章
- python+appium 【已解决】真机运行appium报错“WebDriverException: Message: A new session could not be created. (Original error: Command failed: C:\Windows\system32\cmd.exe /s /c.......详见内文
问题报错提示: selenium.common.exceptions.WebDriverException: Message: A new session could not be created. ...
- iOS真机运行 Xcode报错(libpng error: CgBI: unhandled critical chunk)问题已解决;
Cocos2d-x加载图片资源出现libpng error: CgBI: unhandled critical chunk Xcode7.3 设置Remove Text Metadata From P ...
- (已解决)iOS真机运行 Xcode报错(libpng error: CgBI: unhandled critical chunk)
Cocos2d-x加载图片资源出现libpng error: CgBI: unhandled critical chunk Xcode7.3 设置Remove Text Metadata From P ...
- appium ios真机自动化环境搭建&运行(送源码)
appium ios真机自动化环境搭建&运行(送源码) 原创: f i n 测试开发社区 6天前 Appium测试环境的搭建相对比较烦琐,不少初学者在此走过不少弯路 首先是熟悉Mac的使用 ...
- appium ios真机自动化环境搭建&运行(送源码)
appium ios真机自动化环境搭建&运行(送源码) 原创: f i n 测试开发社区 6天前 Appium测试环境的搭建相对比较烦琐,不少初学者在此走过不少弯路 首先是熟悉Mac的使用 ...
- mac 下 配置appium +ios真机环境
mac系统:10.11.6 xcode:7 appium:1.5.3 iphone: 6 p 1.搭建 appium 安卓的环境: 1.jdk 2.sdk 3.appium 4.配置环境变量 mac下 ...
- Appium学习之驱动真机运行
一.Appium工具的简单原理 Appium工具可以分为:客户端(appium-client).服务端(appium-server)和移动设备端(模拟器或者真机).客户端支持多语言,如:python- ...
- ionic ios项目真机运行-不用开发者账号
ionic ios项目真机运行-不用开发者账号 1. 添加ios平台 ionic platform add ios 2.使用XCODE打开项目 3.使用APPID登录XCODE 打开XCODE账号登录 ...
- 第四章 Appium真机运行测试用例讲解
-----手机自动化之Appium 手机自动化测试用例虽然可以在模拟器上运行,可是模拟器毕竟和真机还是有区别的.在第二章我们讲到了模拟器上运行测试用例后,我又花了两天的时间,研究了一下真机运行测试用例 ...
随机推荐
- 【Access2007】解救被阉割的truncate
Access2007使用被阉割的J-SQL语句,语法跟T-SQL语句.也就是寻常最标准的SQL语句一模一样,但就是仅保留insert into,delete,select,update与没太大意义的过 ...
- Android仿微信朋友圈图片浏览器(支持图片手势缩放,拖动)
※效果 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGluZ2xvbmd4aW4yNA==/font/5a6L5L2T/fontsize/400/fil ...
- 开源Android-PullToRefresh下拉刷新源代码分析
PullToRefresh 这个库用的是很至多.github 今天主要分析一下源代码实现. 我们通过ListView的下拉刷新进行分析.其他的类似. 整个下拉刷新 父View是LinearLayo ...
- 通过Graph 浏览器体验Microsoft Graph
作者:陈希章 发表于 2017年3月18日 上一篇介绍了Microsoft Graph的基本概念,接下来我们快速体验一下Microsoft Graph到底能做什么? 为了帮助开发人员直观和快速体验Mi ...
- 史上最强学生管理系统之IO版
既上一博发布的ArrayList版本之后,新一版的IO版又来了,其实只是在上一个版本里面添加了IO流的内容,将存入更改的信息更新到了文件中而已,这个版本网上仍然很多,本人只是在某些方面稍加修改,因为自 ...
- nginx+zuul
最近将公司的一些服务迁移到spring cloud了,感觉zuul智能路由的功能非常好用,比以前手动在nginx中添加localtion,upstream方便多了,但是服务域名的80端口被ngin ...
- MPSOC之4——petalinux提取源码
petalinux使用太不方便,捆绑的太死板,也不通用,还不如直接用编译器来的简单高效. 本文说明从petalinux中提取出源代码的过程,前提是已经petalinux-build完成. 1. ubo ...
- JavaSe:UncaughtExceptionHandler
Java中,出现对于异常的处理,通常是使用try{}catch()来捕获处理的.但是在使用trycatch时,未必会将所有的异常都捕获到,所以方法声明时可以有throws xxxException. ...
- jsp中EL表达式不起作用的问题1
问题:在jsp页面中使用el表达式取值,取不到值,但是使用jsp中嵌套java代码可以取到值,对应代码如下: 解决: 只要在 jsp中 头文件中写上 : <%@page isELIgnored= ...
- OpenCASCADE构造一般曲面
OpenCASCADE构造一般曲面 eryar@163.com Abstract. 本文主要介绍常见的曲面如一般柱面(拉伸曲面).旋转面在OpenCASCADE中的构造方法,由此思考一般放样算法的实现 ...