Appium Appium 中使用 WebdriverAgent

恒温 · 2016年08月19日 · 最后由 恒温 回复于 2016年11月05日 · 3145 次阅读
本帖已被设为精华帖!

@codeskyblue

WDA 都这么好用了,为什么都还在芝芝不倦的用 Appium 里的 UIAutomation 呀

我也是这样认为的。其实从 XCUITesting 出来之后,UIAutomation 就面临退休的境遇,不过 XCUITesting 的声音也不够响亮,反倒是 WDA 出来后,引得一致好评,苹果的自动化测试工具的宿命就是那么悲惨 🙀

作为移动端 UI 自动化测试霸主的 Appium,其实一早就把 WDA 纳入了它的麾下。看 appium-xcuitest-driver 就知道了。我估计等 ios 10 发布,WDA 就会成为 Appium 的标配吧。

+      if (caps.platformVersion) {
+        let majorVer = caps.platformVersion.toString().split(".")[0];
+        if (majorVer >= 10) {
+          log.info("Requested iOS support with version >= 10, using XCUITest " +
+                   "driver instead of UIAutomation-based driver, since the " +
+                   "latter is unsupported on iOS 10 and up.");
+          return XCUITestDriver;
+        }
+      }

但是目前来看,似乎在 Appium 里面使用 WDA 的人不多,看官方也没有怎么使用的文档,只能从代码里一窥。

// we don't necessarily have an `automationName` capability,
if (caps.automationName) {
  if (caps.automationName.toLowerCase() === 'selendroid') {
    // but if we do and it is 'Selendroid', act on it
    return SelendroidDriver;
  } else if (caps.automationName.toLowerCase() === 'xcuitest') {
    // but if we do and it is 'XCUITest', act on it
    return XCUITestDriver;
  } else if (caps.automationName.toLowerCase() === 'youiengine') {
    // but if we do and it is 'YouiEngine', act on it
    return YouiEngineDriver;
  }
}

所以你现在想用下 WDA,可以把 automationName 设置为 XCUITest。 这样就可以使用 XCUITestDriver 了。

原理很简单:只要看看 appium/node_modules/appium-xcuitest-driver/lib/webdriveragent.js 这个 js 文件就知道了。大致如下:

  1. 看看有没有传入 WDA 的路径:BOOTSTRAP_PATH 和 AGENT_PATH,如果没传,就用 Appium 自带的。
  2. ./Scripts/bootstrap.sh 一把。 这个是 WDA 自己的脚本,获取一些依赖等等
  3. 使用 XCodebuild 命令把 WDA 运行起来。就是下面这个命令了:
xcodebuild -project WebDriverAgent.xcodeproj \
          -scheme WebDriverAgentRunner \
          -destination 'platform=iOS Simulator,name=iPhone 6' \
          test

之后,还是和以前一样,客户端命令传过来,直接 proxy 进 WDA 的服务器即可。目前很多 API 还不是很好用。希望官方出一个指导意见。不过好像 @chenhengjie123 哥哥自己搞了一套 WDA 的封装,可以让他分享下。另外, @xdf 的 macaca 也已经集成了 WDA, @codeskyblue 的 atx 也支持 WDA,大家都可以试试。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 15 条回复 时间 点赞

刚刚在 Appium 1.5.3 上试了下,感觉还是不支持啊
automationName=XCUITest 会提示只能输入 Appium Selendroid WebDriverAgent,然后输入 WebDriverAgent 感觉还是用 UIAutomation 在实现
难道是这个正式的版本不支持么?

恒温 #16 · 2016年08月20日 Author

#1 楼 @shljsh 用代码执行。 1.6 beta 发布了。也可以试试看。

AutomatorX 也支持的 @Lihuazhang

思寒_seveniruby 将本帖设为了精华贴 08月21日 13:42

加精理由: 提升 iOS app 的自动化速度和稳定性是行业需要的. 对 facebook 的 wda 与 appium 的结合提供了较早的介绍信息.

最近都没怎么关注 WDA 了,之前它的开发者说 API 要改成遵循 WebDriver 的,不遵循的用类似 appium 的方式用私有 route ,但不知道现在进展如何。

python client 的话我后面找个时间重写一个吧,之前在公司写的现在我手上也没有了。。。

WDA 会打破僵局嘛

#2 楼 @Lihuazhang 试了 1.6 beta 感觉还不错,同时也支持 FBSimulatorControl 框架,可以多开模拟器,感觉爽歪歪

恒温 #10 · 2016年08月22日 Author

#9 楼 @shljsh 赞,FBSimulatorControl 多开模拟器,分享下?

#10 楼 @Lihuazhang 平时太忙啦没什么空单独另外开贴,https://github.com/facebook/FBSimulatorControl 这个是相关工程,和 WDA 一样是 FB 的东西,而且和 WDA 非常兼容。我是装了命令行工具来用的,感觉还蛮方便的,可以参考https://github.com/facebook/FBSimulatorControl/blob/master/fbsimctl/README.md

#11 楼 @shljsh 哈哈感谢分享~~这个大家都看看~~有空就分享分享出来经验吧~~~

#7 楼 @chenhengjie123 我这边是直接使用 appium 的 python lib 修改一下初始化的地方, 其余绝大部分都可以直接通用

#9 楼 @shljsh appium 1.6 支持 iOS 多台并行测试的意思吗?

楼主您好 WDA 能支持 Xpath 吗 有时会碰到除了坐标以外什么都没有的控件,没有 xpath 不好定位啊,iOS 端的。

恒温 #16 · 2016年11月05日 Author

#15 楼 @CleverPotato 支持的。就是找起来不是很方便,而且也是莫名其妙的 path

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册