环境
appium 版本:1.2.1
系统 :android 4.4.2
设备 :Android Emulator(Intel HAXM)

背景
------之前一直采用 robotium 对公司的产品进行 UI 的自动化测试。发觉 robotium 真心不错,测试应用和被测应用作为同一个进程的两个不同线程,测试线程能够访问被测应用的属性并进行设置,如 setText 等。做了以下工作:

------a) 我在 solo 类的基础上进行了简单的封装,采用面向对象的思想,加入操作后截图和延时等待的机制
------b) 结合 jenkins 进行用例的管理以及 junit 报告的展示,通过 bat 脚本进行控制,对失败用例进行重跑 (网易公司的 Orange 框架也实现了这个功能:http://qa.blog.163.com/blog/static/19014700220126254558638/)

:main

    set className=%1
    set functionName=%2

    set /a b=b+1
    echo %b%
    adb shell am instrument -e class %className%#%functionName% -w packageName/com.zutubi.android.junitreport.JUnitReportTestRunner
    adb pull /data/data/com.eg.android.packageName/files/junit-report.xml ./%functionName%.xml

    findstr "AssertionFailedError" %functionName%.xml > nul && echo "try it again" || set b=0

    if %b%==0 (
        echo "testcase is ok"
        goto :eof
    ) else (
        if %b%==3 (
            goto :eof
        ) else (
            goto :main
        )
    )

-----但 robotium 的硬伤在于不能跨进程测试,而且如果没有被测试应用的签名,可能会有些用例(涉及到签名校验)无法验证。
-----随着公司对产品安全性要求的提高,产品在签名这一块有了更多的校验,这样会导致更多的用例无法校验。因此考虑其它的测试框架

appium 的学习
----a) Appium 是基于 UIAutomator 框架实现的
----b) Appium 测试进程与目标应用进程是分开的
----c) 对 webview 的测试

final Set<String> contextNames = driver.getContextHandles();
for (final String  contextName : contextNames) { 
   System.out.println(contextName); 
} 
driver.context("WEBVIEW");

----d) 判断页面元素是否存在

public boolean elementExist(final By Locator) {
    try {
      driver.findElement(Locator);
      return true;
    } catch (final org.openqa.selenium.NoSuchElementException ex) {
      return false;
    }
  }

----e) 滑动手势

final TouchAction gesture = new TouchAction(driver).press(startX, stratY)
    .moveTo(startX, stratY + height)
    .moveTo(startX, stratY + height + height)
    .moveTo(startX + width, stratY + height + height).release();
gesture.perform();

待完成的问题 (路过的大侠,请指教一下)

1、应用的遍历测试。难点在于有些点击操作不会发生跳转,有些会,还没搞明白,要怎么处理
2、设置 DesiredCapabilities 时,如果有 apps,会识情况重装应用(即使已经安装好了),到底什么情况会重装应用,还没搞明白
3、设置 DesiredCapabilities 时,如果没有 apps,从日志来看,也不会清理目标机器上目标应用的运行环境,因为没有看到 pm clear


↙↙↙阅读原文可查看相关链接,并与作者交流