美文网首页资料IT圈移动测试
如何在 iOS 真机运行 Appium

如何在 iOS 真机运行 Appium

作者: 赏味不足 | 来源:发表于2015-02-05 23:48 被阅读13987次

    更新下:

    使用 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 bundleappium -U --app

    或者在脚本里指定两个 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 deviceconsoleerror: iOS log capture failed: spawn ENOENTinfo:[debug] Cleaning up appium sessionerror: Failed to start an Appium session, err was: Error: spawn ENOENTinfo:[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 就算为空也一定要,代码写死的。。。

    恒温写于http://testerhome.com/topics/1377

    相关文章

      网友评论

      • bigCatloveFish:你觉的这样复制 有意思么
      • 4e7b0213a613:楼主帮忙看看呀[debug] [iOS] App is not installed. Will try to install.

        [MJSONWP] Encountered internal error running command: Error: Installing com.pingan.medicalInHouse failed
        at /Applications/Appium.app/Contents/Resources/node_modules/appium/node_modules/appium-ios-driver/node_modules/node-idevice/main.js:159:6
        at ChildProcess.exithandler (child_process.js:193:7)
        at emitTwo (events.js:100:13)
        at ChildProcess.emit (events.js:185:7)
        at maybeClose (internal/child_process.js:850:16)
        at Socket.<anonymous> (internal/child_process.js:323:11)
        at emitOne (events.js:90:13)
        at Socket.emit (events.js:182:7)
        at Pipe._onclose (net.js:475:12)
        5ca05c222862:@阳光下的自己 Warning: libimobiledevice-1.2.0 already installed
        Warning: You are using a pre-release version of Xcode.
        You may encounter build failures or other breakages.
        Please create pull-requests instead of filing issues.
        qingzhendeMacBook-Pro:~ qingzhenmeng$ brew install ideviceinstaller
        To restore the stashed changes to /usr/local run:
        'cd /usr/local && git stash pop'
        ==> Auto-updated Homebrew!
        Updated Homebrew from e93771a to 8d5df2e.
        No changes to formulae.

        Warning: ideviceinstaller-1.1.0_2 already installed

        提示已经存在了,但是还是报错
        4e7b0213a613:@5ca05c222862 解决了 ,你试试这个
        brew install --HEAD libimobiledevice
        brew install ideviceinstaller
        5ca05c222862:@阳光下的自己您好,这个问题解决了么?我这边也报这个问题
      • 4e7b0213a613:你好真机运行时不能加载我的bundleID,但是我的应用可以在真机上运行,为什么报这个错[debug] [iOS] App is not installed. Will try to install.

        [MJSONWP] Encountered internal error running command: Error: Installing com.pingan.medicalInHouse failed

      本文标题:如何在 iOS 真机运行 Appium

      本文链接:https://www.haomeiwen.com/subject/qdhdxttx.html