使用 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 安装到真机会方便很多。

拓展: 什么是 Provisioning Profile?

运行

要指定真机运行有两种方式:

  • 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的更多相关文章

  1. 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. ...

  2. iOS真机运行 Xcode报错(libpng error: CgBI: unhandled critical chunk)问题已解决;

    Cocos2d-x加载图片资源出现libpng error: CgBI: unhandled critical chunk Xcode7.3 设置Remove Text Metadata From P ...

  3. (已解决)iOS真机运行 Xcode报错(libpng error: CgBI: unhandled critical chunk)

    Cocos2d-x加载图片资源出现libpng error: CgBI: unhandled critical chunk Xcode7.3 设置Remove Text Metadata From P ...

  4. appium ios真机自动化环境搭建&运行(送源码)

    appium ios真机自动化环境搭建&运行(送源码) 原创: f i n  测试开发社区  6天前 Appium测试环境的搭建相对比较烦琐,不少初学者在此走过不少弯路 首先是熟悉Mac的使用 ...

  5. appium ios真机自动化环境搭建&运行(送源码)

    appium ios真机自动化环境搭建&运行(送源码) 原创: f i n  测试开发社区  6天前 Appium测试环境的搭建相对比较烦琐,不少初学者在此走过不少弯路 首先是熟悉Mac的使用 ...

  6. 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下 ...

  7. Appium学习之驱动真机运行

    一.Appium工具的简单原理 Appium工具可以分为:客户端(appium-client).服务端(appium-server)和移动设备端(模拟器或者真机).客户端支持多语言,如:python- ...

  8. ionic ios项目真机运行-不用开发者账号

    ionic ios项目真机运行-不用开发者账号 1. 添加ios平台 ionic platform add ios 2.使用XCODE打开项目 3.使用APPID登录XCODE 打开XCODE账号登录 ...

  9. 第四章 Appium真机运行测试用例讲解

    -----手机自动化之Appium 手机自动化测试用例虽然可以在模拟器上运行,可是模拟器毕竟和真机还是有区别的.在第二章我们讲到了模拟器上运行测试用例后,我又花了两天的时间,研究了一下真机运行测试用例 ...

随机推荐

  1. java中的集合操作类(未完待续)

    申明: 实习生的肤浅理解,如发现有错误之处.还望大牛们多多指点 废话 事实上我写java的后台操作,我每次都会遇到一条语句:List<XXXXX> list = new ArrayList ...

  2. 【最短路】 ZOJ 1544 Currency Exchange 推断负圈

    给出 N 种货币 M 条兑换关系 開始时全部的货币S 和有X 块钱 接下来M条关系 A B W1 W2 W3 W4 表示 A->B 所需的手续费为W2块钱  汇率为W1 B->A 所需的手 ...

  3. MySQL数据库使某个不是主键的字段唯一

    在使用MySQL数据的过程中有时候我们须要某个不是主键的字段不反复.这个时候就要用到SQL的UNIQUE约束了. 以下摘抄自w3school里的一段介绍: UNIQUE 约束唯一标识数据库表中的每条记 ...

  4. 我的Java开发学习之旅------&gt;Base64的编码思想以及Java实现

    Base64是一种用64个字符来表示随意二进制数据的方法. 用记事本打开exe.jpg.pdf这些文件时,我们都会看到一大堆乱码,由于二进制文件包括非常多无法显示和打印的字符.所以,假设要让记事本这种 ...

  5. 【日常学习】【线性DP】codevs1044 拦截导弹题解

    题目描写叙述 Description 某国为了防御敌国的导弹突击,发展出一种导弹拦截系统.可是这样的导弹拦截系统有一个缺陷:尽管它的第一发炮弹可以到达随意的高度,可是以后每一发炮弹都不能高于前一发的高 ...

  6. 大数据学习(4)MapReduce编程Helloworld:WordCount

    Maven依赖: <dependency> <groupId>jdk.tools</groupId> <artifactId>jdk.tools< ...

  7. vertical-align 和 img属性 和 鼠标样式

    一.vertical-align 一)定义:定义行内元素的基线相对于该所在基线的垂直对齐.(只针对行类块inline/inline-block/<img>,块级不适用!) 二)语法:  三 ...

  8. log4go的输出优化

    又看了一些golang的日志包和相关的文章,仔细阅读了go 1.9.2系统提供的log和go-log,产生了对log4go的日志输出进行优化的想法. 结构化与multiwriter log使用mult ...

  9. spring cloud sidecar

    用spring cloud sidecar的整合异构语言,以前做过没有做笔记,现在再做由于各种坑又浪费了一天,这里记一下 首先是官网:http://cloud.spring.io/spring-clo ...

  10. IEEE1588 verision2 报文介绍

    PTP报文 PTP verision2报文是由 报头,主体 和 报尾 (header, body, and suffix)组成,报尾长度可能为0. PTP verision2报文在verision1的 ...