• Swift 2.0 到底「新」在哪? at 2015年08月27日

    文章总结的不错,感谢分享。等 Xcode7 出了再去实践一下,手上只有一台 mac book,不敢上 10.11 。。。

  • #7 楼 @testbird
    统一在这个帖子回复吧。。。
    我上面说过了:

    appium 里面的 log 记录的都是 appium 的操作,你这个问题是 app 本身的问题,需要看 app 本身的 log 。看 appium log 可以获取一些辅助线索,然并卵。

    查看真机实时 sys log 可以用 idevicesyslog 这个工具,它是 libimobiledevice 的一部分(libimobiledevice 同时包含了 appium 用来安装应用到真机使用的 ideviceinstaller)。

    同时思考一下,为啥开发那边没问题,你这边有问题?环境配置到底有什么不同的地方?

    找出问题原因首先要找到足够的数据,然后再根据这些数据思考、分析才能知道原因。

    appium 看不到元素只是表象,深层次的原因得去查源码或者调试。而且这些方面的数据相信你也不方便给我,所以主要要靠你多思考、自己去分析了,其他人只能给大致方向。

  • CrashMonkey4iOS 试用过程总结 at 2015年08月27日

    #41 楼 @kkself 必须的啊,否则装不上的。

  • #3 楼 @xiaoli 木有。。。近半年的基本都看过,但更早的只看了一些大神的发帖记录。

  • 什么是 “直到下次刷新之前的信息”?
    你的意思是要刚好滑到之后一条可见,但又不至于再多滑一次导致加载了新的信息?

  • CrashMonkey4iOS 试用过程总结 at 2015年08月27日

    #39 楼 @kkself 选项确定没选错?
    要 build 的 target 的 build setting -> Code Signing 应该是这样的:

  • 好文!对于 API 接口文档尤为实用。
    如果能有具体例子就更好了。

  • 另外,这个图像对比准确度还是不足以直接作为结果对比的吧,毕竟全图 80% 粒度有点大
    Monkey 以前写过一个 https://testerhome.com/topics/202

  • 赞!
    建议把标题里面的 “如何” 去掉吧,否则会被误认为是询问帖。

  • #3 楼 @chungeguo 你上面提到的貌似都没自带录制吧(appium 勉强算有,但不好用)。。。

  • 请教一下,callback 里的 error 参数是用来做什么的?
    在你的例子里只看到通过判断 _port 与传入参数是否一致来判断端口是否可用,但没看到 error 参数的使用。

  • 赞!
    Straybird 有在 testerhome 注册吗?

  • #1 楼 @lihuazhang 每天 1 小时,2 周左右通读完。但里面一些很细的地方(如白盒测试用例的设计)没有看得太细。这本书我主要收获思想,实际技术大多已经过时了。

  • 你的应用 crash 了?

    Exception Type: EXC_BAD_INSTRUCTION (SIGABRT) 的原因一般是使用了一个已经 release 的对象,想要具体知道大致是哪个对象需要开一下 NSZombieEnabled 变量。

    你上面发的是应用的 crash log ,并不是运行时的 log 。

    查看真机实时 sys log 可以用 idevicesyslog 这个工具,它是 libimobiledevice 的一部分(libimobiledevice 同时包含了 appium 用来安装应用到真机使用的 ideviceinstaller)。

  • 上面的错误说明 appium 连接不上 webkit 的远程调试器,就是说 appium 连不上你的 webview 里的 safari 浏览器内核。

    另外,我不是说过了,需要查看 ios sys log 嘛。。。
    appium 里面的 log 记录的都是 appium 的操作,你这个问题是 app 本身的问题,需要看 app 本身的 log 。看 appium log 可以获取一些辅助线索,然并卵。

  • 理论上支持,实际上没试过,不敢确定。
    话说你们公司好激进,这么快上 win10,不怕旧软件不兼容吗?

  • 我目前没遇到过这种情况,而且也不知道你的 app 里面具体使用了什么框架/方式来获取网络数据,所以答不上来。。。

    建议你先收集一下 crash log 或者 iOS sys log 看看到底哪里出错或者卡在哪一步,然后再进一步地去查询吧。

    另外,仔细查看一下开发那边的配置和你的配置有什么出入,有可能就是有出入那部分造成的问题。

  • 女嘉宾 😍 😍

  • 这个情况是不是就是 https://testerhome.com/topics/3160 里面那个?
    如果开发那边没问题,那就找开发帮忙检查一下环境配置吧。我们不知道你的 app 具体用了什么技术,启动加载的逻辑是什么,也没有能直接反映卡住时 app 处于什么状态的 log ,基本定位不了问题。。。

  • 顶一下
    可惜不在上海。。。

  • 额,还是没能明白你的问题。

    通过 ui 自动化工具获取 来刷新当前消息

    这句话没看懂。

    可以的话能否详细说一下 app 的消息是如何刷新的(自动/特定步骤/其他),然后想如何获取消息?nice 这个软件国内用的人不多,所以你说类似 nice 获取用户消息可能很多人还是不明白你的意思。

    例如:

    • app 刷新机制:服务器自动推送,用户发送消息到服务器后服务器会自动推送给对应用户的客户端。

    • 需要实现的用例:

    1. a 用户发送消息给 b 用户
    2. 检查 b 用户是否能在 xx 秒内收到消息(UI 上自动出现 a 用户发出的消息) ....
    • 遇到的问题:

    尝试使用 appium 工具执行用例,但遇到 xx 问题,用例中第 xx 步应该获取到 xx 信息,但实际上 xxx 。

  • #8 楼 @testbird 我想确认一下我理解对不对:

    会卡住的过程(UIAutomation 或 appium):打开应用->出现等待页面(类似广告)->卡死在这里,进入不了视频主界面
    不会卡住的过程:打开应用->出现等待页面(类似广告)->由于网络原因没有获取到数据,直接进入空白的视频主界面
    正常启动过程(没使用自动化工具,纯人工启动):打开应用->出现等待页面(类似广告)-> 通过网络连接获取到视频主界面需要的数据->进入视频主界面。

    如果是这样的话得了解一下之前视频主页为何被关闭,以及关闭时和不关闭时逻辑处理有什么区别了。同时也要看一下正常启动过程在出现等待页面到进入视频主界面大致需要多长时间。

    1. 排版不符合要求
    2. 请添加头像
  • #5 楼 @testbird 大致看了一下,主要出问题的地方是:

    info: [debug] Error: App did not have elements
    at /Applications/Appium.app/Contents/Resources/node_modules/appium/lib/devices/ios/ios.js:483:30
    at Object.cb as callback
    at next (/Applications/Appium.app/Contents/Resources/node_modules/appium/node_modules/async/lib/async.js:798:43)
    at /Applications/Appium.app/Contents/Resources/node_modules/appium/node_modules/async/lib/async.js:32:16
    at [object Object].exports.respond (/Applications/Appium.app/Contents/Resources/node_modules/appium/lib/devices/common.js:28:9)
    at [object Object].<anonymous> (/Applications/Appium.app/Contents/Resources/node_modules/appium/lib/devices/ios/ios.js:1473:18)
    at getResultAndSendNext (/Applications/Appium.app/Contents/Resources/node_modules/appium/node_modules/appium-uiauto/lib/command-proxy.js:146:20)
    at Socket.<anonymous> (/Applications/Appium.app/Contents/Resources/node_modules/appium/node_modules/appium-uiauto/lib/command-proxy.js:88:7)
    at Socket.emit (events.js:129:20)
    at _stream_readable.js:908:16
    at process._tickDomainCallback (node.js:381:11)
    info: [debug] Responding to client with error: {"status":33,"value":{"message":"A new session could not be created. (Original error: App did not have elements)","origValue":"App did not have elements"},"sessionId":null}
    info: <-- POST /wd/hub/session 500 18640.090 ms - 172
    

    可以肯定的是,app 和 UIAutomation 都起来了,但神奇之处在于 au.mainApp().getTreeForXML() 这个命令获取到的元素列表为:

    {"UIAApplication":{"@":{"name":null,"label":null,"value":null,"dom":null,"enabled":false,"valid":false,"visible":false,"hint":null,"path":"/0","x":2.7063929845e-314,"y":2.701248923e-314,"width":1.061256928e-314,"height":3.372846711e-314},">":[]}}
    

    正常来说,UIAApplication 应该有至少一个子节点的(就算界面空白一片实际上也应该有元素),但在你的 app 里抓取不到。

    相关关键代码:https://github.com/appium/appium/blob/v1.4.1/lib/devices/ios/ios.js

    IOS.prototype.waitForAppLaunched = function (cb) {
      // on iOS8 in particular, we can get a working session before the app
      // is ready to respond to commands; in that case the source will be empty
      // so we just spin until it's not
      var condFn;
      if (this.args.waitForAppScript) {
      ...
      } else {
        logger.debug("Waiting for app source to contain elements");
        condFn = function (cb) {
          this.getSourceForElementForXML(null, function (err, res) {
            if (err || !res || res.status !== status.codes.Success.code) {
              return cb(false, err);
            }
            var sourceObj, appEls;
            try {
              sourceObj = JSON.parse(res.value);
              appEls = sourceObj.UIAApplication['>'];
    
              if (appEls.length > 0 && !IOS.isSpringBoard(sourceObj.UIAApplication)) {
                return cb(true);
              } else {
                return cb(false, new Error("App did not have elements"));
              }
            } catch (e) {
              return cb(false, new Error("Couldn't parse JSON source"));
            }
            return cb(true, err);
          });
        }.bind(this);
      }
      this.waitForCondition(10000, condFn, cb, 500);
    };
    

    appium 通过判断 在 10 秒内界面是否有在 UIAApplication 内的元素并且已经不在 SpringBoard(就是点击应用图标后会立即出现的静态界面)里面 来判断被测应用是否成功启动了。你的 app 没能通过检查,所以就建立不了 session 了。

    能否描述一下实际上在手机端的显示是怎样的?在应用被打开后(从 log 来看至少应用打开的动画应该出现过)界面显示是怎样的?

    从 ios sys log 来看,你的 app 本身也有一些报错信息:

    info: [IOS_SYSLOG_ROW ] Aug 21 09:37:45 1905de-iPhone FilmSiteClient[395] <Error>: assertion failed: 12D508: libxpc.dylib + 71792 [3C982BC2-5B46-305A-9A09-3C3D15332820]: 0x7d
    

    同时 app 启动时会联网获取不少数据,不知道内部设计逻辑是获取完才初始化界面还是先初始化界面。

    如果可以的话,能否开启了 --time-stamp 后再获取一次 log ?首次启动需要联网获取不少信息,但里面的时间戳是手机上的时间,和后面 Instruments log 的时间戳不对应,所以不知道是否因为获取不到网络信息导致 app 没能成功初始化。如果确实是,那就是 app 设计缺陷了。