• #3 楼 @fir_im :plus1:

  • 不错,晚些试用一下。
    另外,有些地方 markdown 语法用错了。

    ####1.更新 iOS SDK cocoaPods 版本
    

    应为

    #### 1.更新 iOS SDK cocoaPods 版本
    

    更新的崩溃列表查看崩溃时间改为**最近 30 天**
    

    应为

    更新的崩溃列表查看崩溃时间改为 **最近 30 天**
    

    markdown 对空格还是比较敏感的。

  • 异步等待的 Python 协程 at 2015年08月12日

    例子很赞。学习了。

  • #2 楼 @fir_im 加粗有问题:

    iOS应用程序一般都是由**自己编写的代码**和**系统框架**(system frameworks)组成
    

    第一个双星号前必须有一个空格。我以前也常犯这个错误。。。

  • 学习了,去看了一下 sbt-native-packager ,打包功能真心强大!

  • 这是 mac ?brew install node 装上的 node 不是可以不用 sudo 来安装 npm 包的吗?

  • #2 楼 @zsx10110 有,但需要自己封装。

    1. 首先找到 scrollView 的大小
    2. 计算每次 swipe 的距离和速度
    3. 不断 swipe ,直到 scrollView 的最后一行不再变化(最好加几个 retry,在最后一行和滑动前一样时再滑几次,避免遇到 scrollView 刚好滑动前后最后一行内容刚好一样)
  • 分析很不错,确实找到问题根源了。

    不过 appium 支持 uiautomator 的 api 本来意图是用来找元素的(所以才叫 find_element_by_android_uiautomator )。如果返回值不是一个元素,当然会报异常。

    大致看了一下, appium 对于 uiautomator 语句的检查十分严格,要求必须返回 UiScrollable 或 UiObject ,并且严格限定了参数的写法。我试过用类似 new UiSelector().checked(new UiScrollable(new UiSelector().scrollable(true)).scrollToEnd(3)) 的方式绕过返回值类型的限制,但没想到它竟然连 checked 的内容都限定为只能是 truefalse (boolean 类型),而对于参数类型为 string 的限定了参数内容第一个和最后一个字符必须是双引号。我尝试用 new UiSelector().fromParent 绕过(object 类型的检查是最松的),但结果还是不行(提示 Could not parse UiSelector argument: UiSelector has no new UiScrollable method

    看来 appium 只支持 uiautomator api 中查找元素的部分,而不是完全支持 uiautomator api 。不过这也符合 find_element_by_android_uiautomator 这个方法本身的定位。

  • MonkeyTalk Java API 使用教程 at 2015年08月08日

    学习了。 MonkeyTalk 的 API 好强大。

  • [实用] 数据 mock 工具 at 2015年08月08日

    我终于看懂了,批量生成 SQL 语句/ json 数据。
    有 api 可以让程序访问后自动生成吗?

    对业务同学来说,像 MTSC 上面那种形式的 mock server 才容易上手吧。

  • 新版的 robotframework 自带了 datetime 这个 library 的吧。
    你使用 RIDE 的吗?找到一个相关的问题:http://stackoverflow.com/questions/26843149/unable-to-import-datetime-library-in-robot-framework

  • #2 楼 @chocolatesweety 你贴的是 appium client 输出的 log ,一些错误细节已经被隐藏掉了,所以定位不了问题。

  • 1、appium server log(如果是命令行,就是命令行里的输出字符,如果是 GUI,就是里面黑色底的界面里面的内容)

  • 麻烦提供一下:
    1、appium server log(如果是命令行,就是命令行里的输出字符,如果是 GUI,就是里面黑色底的界面里面的内容)
    2、使用环境:appium 版本、client 版本、android 版本等。

    引起 Unknown server error 的原因有很多,有可能是 dump 出错,UIAutomator 挂了等等。光靠 unknown server-side error 定位不了问题的,需要 appium server log 才能比较准确地准确定位问题。

  • #2 楼 @if1else0 找到一个可能的原因了:robotium-solo.jar 里面根目录直接就是 com 文件夹,而你的 robotium-master.zip 里面还多了几层,并没有做到目录结构和 jar 文件保持一致,所以链接不过去。

  • #2 楼 @if1else0 .class 文件本来就在 jar 里面啊,里面只能看到类变量和类方法名,方法的具体实现都是看不到的。

    我对 source 的理解应该是 source code ,即源代码(带有 src 这个标签),能看到方法的具体实现和插入断点辅助 debug 。.class 文件做不到这点。

    可以参考 structs2 的 jar 包,有按照用途分为 lib,javadoc,src,all 等不同的 jar 包。

  • 我竟然和三位大神一起放在被 @ 的位置,受宠若惊啊!

    对于 serverAddress,我建议如果允许外部调用的话统一使用 0.0.0.0 。

    这个是监听地址,只有发送的网络包里的 destination 是符合这个 serverAddress 及 port 的才会被 appium 捕获到。

    如果输入 127.0.0.1 那就只有在 server 那台机器上的脚本能连到这个 appium server 了,因为外部链接都不可能是发到 127.0.0.1 的(因为 127.0.0.1 在任何机器上都是指代这台机器本身,发请求到 127.0.0.1 是发不了给其他机器的)。

    0.0.0.0 表示广播地址,能匹配所有 ip 地址,即监听所有发到这个机子的指定端口的网络包。这个和直接用本机 ip 地址的主要区别是:用这个的话你就不用管这台机本机地址是什么了(针对 ip 地址经常会变化的环境或者批量部署比较有用。否则换个 ip 这个参数就得改一次)

    至于这个参数的存在理由,其实主要就在于是否使用 127.0.0.1 了(即是否能被网络中其他电脑调用,说白了是权限的差异)。我见过的其他类似程序(如 xwalkdriver)是封装成默认只允许本地连接,如果需要允许外部链接需要另外设置允许的外部链接地址。

  • scrollTo 方法的一些问题 at 2015年08月07日

    #14 楼 @shu element name 指的是 content-desc 或者 text 属性。
    可以看下我以前的这个帖子:关于 appium get_attribute 方法的坑
    实际上只需要给个 element.id 就够了,appium 不仅支持 byName,也支持 byXpath,byId 等。只是在 android 上由于隐藏元素在控件树上不可见,所以在 findElement 的时候就会出错了。

    我后面发个帖子专门说下这个 scrollTo 吧。

  • scrollTo 方法的一些问题 at 2015年08月07日

    #11 楼 @zsx10110 问题就是在 android 上用不了。
    对于 android 底层使用的 UIAutomator,至少需要知道 scrollView 和需要查找的元素的 text ,但这个 API 只传了需要查找元素的 text ,没有 scrollView 。appium 应该要通过控件树自动找到 element 所在的 scrollable view,然后把它传给 UIAutomator 。
    对于 iOS 的 UIAutomation,因为 UIAutomation API 直接有个 scrollToVisible 的方法可以不传 scrollView ,所以可以直接使用。

  • react-native 开发者选项窥探 at 2015年08月07日

    不错!图文并茂,学到了不少。
    看来 React Native 的调试更接近于传统的前端调试啊,原生控件基本都已经被隐藏了。

  • scrollTo 方法的一些问题 at 2015年08月07日

    #9 楼 @shu 明白了,我的 scrollTo 是 server 封装的,client 只负责发命令,好处是不仅能支持 Android(不过有点问题),还能支持 iOS 。
    你的 scrollTo 是 Java-client 自己基于 UIAutomator API 封装的 scrollTo ,是这个 client 特有的方法。

    Java 使用 server 封装的 scrollTo 的方法如下:

    // java
    WebElement element = driver.findElement(By.name("Element Name"));
    HashMap<String, String> arguments = new HashMap<String, String>();
    arguments.put("element", element.getId());
    (JavascriptExecutor)driver.executeScript("mobile: scrollTo", arguments);
    
  • 不错,写得很详细。
    不过真的很容易看晕。。。代码数量比较多,而且大多是代码片段,得结合导入了代码的 IDE 来看效果才好。

  • scrollTo 方法的一些问题 at 2015年08月06日

    #2 楼 @shu 另外,麻烦添加一下头像,谢谢。