• #3 楼 @monkey 已收到,继续肉牛满面!谢老板打赏!

  • #1 楼 @lihuazhang 肉牛满面!!! 😢 谢谢!

  • DVB+OTT 测试的一天 at 2015年09月18日

    排版。。。

  • 2015 Selenium 大会 at 2015年09月17日

    补充一句,都没中文字幕。大伙都来练练英文听力(话说有些咖喱的英语听起来好吃力。。。)。不过有 keynote,所以应该还不至于完全不知道在说啥。

  • 以前搞 phonegap 的时候用过 Weinre,没用过 Browsersync 。
    Weinre 功能太弱了,用起来并不好用,我们后面都直接升 4.4 用 Google 的 remote debug 了。

  • 不知道。。。不过自定义 UI 很多在 UIAutomation 里面是识别不到的,原因是没有实现对应的一些 Accessibility 相关的方法。

  • 我做外包做测试的一天 at 2015年09月17日

    #2 楼 @284772894 soga。

  • 我做外包做测试的一天 at 2015年09月17日

    中大,你也是广州的?

  • #7 楼 @seveniruby 原来如此。。。怪不得我今天上 Q 看到恒温说拉我进一个群了,但没找到我进了哪个群。。。
    你能再拉我一次不?我刚加你了。

  • 在 [AAA] 测试工作的一天 at 2015年09月17日

    #3 楼 @tobecrazy 哦?从 eclipse 关联 testlink case?能否详说一下是怎么关联?是只有测试结果有关联还是怎样?

  • #4 楼 @happystone 截图和录视频这个可以看下 stf 的 minicap ,doctorq 之前写过一个帖子:STF 框架之 minicap 工具

    对于 xpath 的慢,我目前查看源码后理解的原因是这样的:

    1. xpath 需要遍历整个元素树,生成一个 xml 数据,然后再做 xpath 查找。遍历和在 xml 中进行 xpath 查找都相当耗时。
    2. 除 xpath 外主要有几类方法。
      1. UIAutomation 代码(如 ios-predicate),直接执行,速度杠杠的。
      2. byId,byName,byAccessibility 这些都是边查找边比较,不会遍历所有元素,所以速度相对快。

    至于前面 @among29 提到的 page_source 的坑,不知和我们遇到的是否一样?我们遇到的是用例不稳定,is_display 方法和 click 方法有一定概率失效,结果发现失效原因是 appium 在 find 的时候缓存的对象已经失效(我们项目中是对应的 app 元素已经被 remove+add 过,内存地址都已经改了),但调用这个对象的方法也不会出错(没有任何异常抛出,只是一直 click 会报错,而 is_display 一直返回 False )。标志是获取这个元素的坐标 (el.position) 出来的值很不正常,会有一个带有 e32 的无穷大值。

    现在我们通过改造 appium 对应模块的方法解决,主要改了两处:

    1. 在内部缓存中不仅存储元素对象,还存储元素查找方法。一旦对象无效(如 name 属性为 null)就执行查找方法再次查找,如果找不到(UIAElementNil),就抛 StaleElementReference 异常。对应代码:https://github.com/appium/appium-uiauto/compare/master...chenhengjie123:element-cache-fix

    2. 增加一个 onlyVisible 属性,在 xpath 查找和 byId,byName 查找中跳过不可见元素(ByUIAutomation 暂时还没做,还在构想要怎么做中),一个是提高查找效率(遍历的元素数量少了),另一个是更好地实现 android 和 iOS 脚本复用(iOS 上有些隐藏元素和可见元素有一样的 id 和 name )。对应代码(还在调试中):https://github.com/appium/appium-uiauto/compare/master...chenhengjie123:hide-invisible-elements

    由于修改的不是 appium 核心代码,所以只需要用这个修改后的替代原来的 appium-uiauto 就可以了。

  • 在初创公司做测试的一天 at 2015年09月16日

    抱着女朋友睡觉。。。羡慕死了。。。

  • 在 [AAA] 测试工作的一天 at 2015年09月16日

    最优秀的技能不是你编程能力有多强,而是分析->定位->解决问题的能力

    严重同意。没有最后的解决问题能力真的会大打折扣。

    话说我桌面也是两台电脑,如果加上 server 就更多了。不过相比断点,我更喜欢在用例里加入 debug log 。

    话说你们也是改造 testlink 来编写测试用例?编写效率如何?有机会交流一下。

  • Good Job!填的好!

  • #4 楼 @face_south 思寒可是大神级人物啊!
    #2 楼 @seveniruby 我晚些估计也要搞接口这些,到时候能问下你不?

  • TesterHome Natvie App at 2015年09月16日

    第五赞!赞赞赞!

  • 在 58 做测试的一天 at 2015年09月16日

    好棒的一天。有孩子就是不一样。
    Q 你可以晒全家福啊,比他们俩多一个,哈哈。

  • 赞!说的十分透彻。理念方面的东西要说清楚、说全面相当不容易。

    PS:有个小建议:

    接口中的所有方法都是 Public 的,但对于抽象类的声明并没有这样的规则,当然不能是 Private 。为什么不能 Private?因为一个抽象方法需要在子类中实现,但 Private 无法访问子类,因此不抽象类不可能存在 Private 属性。

    这句翻译读起来怪怪的。去看了原文后发现有些地方翻译不是很合适:

    All methods in the interface are public, but there is no such rule for those declared in abstract classes. Those ones can have any visibility except private. Why not private? Because an abstract method needs to be implemented in subclass and private is not accessible from subclass. As you can see, those two ideas are mutually exclusive.

    大致意思是抽象类不需要像接口那样都是 Public 的。它们可以是 Private 外的任何可访问权限。为啥不能是 Private ,因为抽象类需要在子类中实现,而 Private 是不能被子类访问的。因此,Private 与抽象类的用法是互斥的。

    译文中的 因此不抽象类不可能存在 Private 属性 这里第一个 “不” 字应该是写多了。

  • #7 楼 @shixue33 补充上去了。虽然没有两千字那么多,但浓缩的都是精华哦。

  • 没有这些琐碎的过程,永远不能到达精彩的彼岸

    说得好!

  • #7 楼 @shixue33 哈哈,好。我这两天补充一下。

  • #2 楼 @cydtest 这个 swipe 无效是模拟器的问题。真机没有这个问题的。 mobile: scroll 就是针对这个问题的 work around。
    详看:https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/touch-actions.md#bugs-and-workarounds