Appium中使用WebdriverAgent

本帖已被设为精华帖!,

@codeskyblue 说

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

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

作为移动端 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,大家都可以试试。

* 注:本文来自网络投稿,不代表本站立场,如若侵犯版权,请及时知会删除