zoukankan      html  css  js  c++  java
  • 如何在 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 安装到真机会方便很多。

    拓展: 什么是 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 就算为空也一定要,代码写死的。。。

     
     
  • 相关阅读:
    matlab-vrep程序控制方法
    .ipyb文件怎么转成 .py文件
    python技巧
    gradle初步认识
    StringUtils
    Elasticsearch、Logstash和Kibana ELK
    redisTemplate、jedis、redission的对比
    唯一ID
    spring相关组件简介
    新电脑环境配置
  • 原文地址:https://www.cnblogs.com/xiyuan2016/p/7444350.html
Copyright © 2011-2022 走看看