ATX ATX 文档 - iOS 真机如何安装 WebDriverAgent

codeskyblue · 发布于 2017年01月23日 · 最后由 xinxinga 回复于 2018年01月09日 · 124946 次阅读

最早知道WebDriverAgent还是通过社区里的一篇文章 WebDriverAgent简介(PS:社区真是伟大,什么都有)
通过这篇文章希望能让初次接触WDA的你,少走一些弯路。

WDA在Github的首页上有一个很简单的安装说明 https://github.com/facebook/WebDriverAgent,参考这个,我再增加一些配图,以及自己使用过程中的一些体会。

开始

尽量升级Xcode到最新版,保持iPhone的版本大于9.3

从github上下载代码

git clone https://github.com/facebook/WebDriverAgent

运行初始化脚本

./Scripts/bootstrap.sh

该脚本会使用Carthage下载所有的依赖,使用npm打包响应的js文件

执行完成后,直接双击打开WebDriverAgent.xcodeproj这个文件。

设置证书

因为安装到真机上都是需要证书签名的,用免费的证书我没有搞定,最后用的还是99美元的开发者证书

画圈的地方,从左向右依次点击。最后Team那一栏,选择你买到的开发者证书帐号。(个人证书也可以)

接着在TARGETS里面选中WebDriverAgentRunner,用同样的方法设置好证书

如果是免费版的个人证书,还需要修改下WebDriverAgent的BundleID,随便加点后缀,只要不跟其他人的重名就好 (这里参考了macaca的一篇文章 https://testerhome.com/topics/8085

运行与测试

菜单栏选择目标设备

Scheme选择WebDriverAgentRunner

最后运行 Product -> Test

一切正常的话,手机上会出现一个无图标的WebDriverAgent应用,启动之后,马上又返回到桌面。这是很正常的不要奇怪。

此时控制台界面可以看到设备的IP。如果看不到的话,使用这种方法打开

通过上面给出的IP和端口,加上/status合成一个url地址。例如http://10.0.0.1:8100/status,然后浏览器打开。如果出现一串JSON输出,说明WDA安装成功了。

端口转发

有些国产的iPhone机器通过手机的IP和端口还不能访问,此时需要将手机的端口转发到Mac上。

$ brew install imobiledevice
$ iproxy 8100 8100

使用iproxy --help 可以查到更具体的用法。 这时通过访问http://localhost:8100/status确认WDA是否运行成功。

而inspector的地址是http://localhost:8100/inspector, inspector是用来查看UI的图层,方便写测试脚本用的

使用终端替代Xcode

通常来说为了持续集成,能够全部自动化比较好一些

# 解锁keychain,以便可以正常的签名应用,
PASSWORD="replace-with-your-password"
security unlock-keychain -p $PASSWORD ~/Library/Keychains/login.keychain

# 获取设备的UDID
UDID=$(idevice_id -l | head -n1)

# 运行测试
xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination "id=$UDID" test

其他问题

论坛里有帖子说要修改BundleID,我试了试,就算不改也挺正常的。
还有一些奇怪的问题,比如

  1. Failed to authorize rights (0x1) with status: -60007
  2. The bundle “WebDriverAgentRunner” couldn’t be loaded because it is damaged or missing necessary resources

在这个官网Wiki里面可以找到解决办法 https://github.com/facebook/WebDriverAgent/wiki/Common-Issues

如果汗流浃背,弄了很久还是没搞定。尝试下这些步骤

  1. git pull更新WebDriverAgent的代码
  2. 卸载手机上的WebDriverAgent
  3. 更新Xcode
  4. 更新Mac系统
  5. 重启Mac

结尾

最后附上基于Python自动化框架地址https://github.com/NetEaseGame/ATX

Xcode问题多多,愿WDA与你同在。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 51 条回复
6853 codeskyblue ATX 系列 - 并行测试多个 iOS 设备 中提及了此贴 02月16日 15:43
11690 lfjking ATX 文档 - iOS WebDriverAgent 环境搭建 入门 中提及了此贴 03月09日 11:52
2106

在进行下面操作的时候一直报错。
OSX:10.12.3
Xcode:8.2.1
iPhone:10.0.2
试过把appium-server从1.6.3更新到1.6.4@beta,问题依旧存在。
在appium-desktop 1.0.0@beta3上也是。
@codeskyblue,请问有什么解决办法?
谢谢!

# 运行测试
xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination "$UDID" test

log如下:

=== BUILD TARGET WebDriverAgentRunner OF PROJECT WebDriverAgent WITH CONFIGURATION Debug ===

Check dependencies

MDMCreateDeltaDirectory:1920 calling MDMDirectoryDiff with:
state->old_bundle: /var/folders/f3/fsxd3f315vg22yc0997bxrl00000gp/C/com.apple.DeveloperTools/All/Xcode/EmbeddedAppDeltas/b52998ac4571334a6ce75968a8a691a2/e01d730b625c83ad877fb699701bc35ea3e800ec/WebDriverAgentRunner-Runner.app
state->new_bundle: /Users/xiaoxue/Library/Developer/Xcode/DerivedData/WebDriverAgent-brdadhpuduowllgivnnvuygpwhzy/Build/Products/Debug-iphoneos/WebDriverAgentRunner-Runner.app
state->dst_bundle: /var/folders/f3/fsxd3f315vg22yc0997bxrl00000gp/C/com.apple.DeveloperTools/All/Xcode/EmbeddedAppDeltas/WebDriverAgentRunner-Runner.app.NVj5Yt/WebDriverAgentRunner-Runner.app_sparse.ipa/Payload//WebDriverAgentRunner-Runner.app, binaryDiff flag: FALSE
    dst_ipa: /var/folders/f3/fsxd3f315vg22yc0997bxrl00000gp/C/com.apple.DeveloperTools/All/Xcode/EmbeddedAppDeltas/WebDriverAgentRunner-Runner.app.NVj5Yt/WebDriverAgentRunner-Runner.app_sparse.ipa
__MDMDirectoryDiff_block_invoke.37:1473 calling writeDictToFile with: /var/folders/f3/fsxd3f315vg22yc0997bxrl00000gp/C/com.apple.DeveloperTools/All/Xcode/EmbeddedAppDeltas/WebDriverAgentRunner-Runner.app.NVj5Yt/WebDriverAgentRunner-Runner.app_sparse.ipa/ManifestCache.plist
writeDictToFile:1278 ==== Successfully wrote Manifest cache to /var/folders/f3/fsxd3f315vg22yc0997bxrl00000gp/C/com.apple.DeveloperTools/All/Xcode/EmbeddedAppDeltas/WebDriverAgentRunner-Runner.app.NVj5Yt/WebDriverAgentRunner-Runner.app_sparse.ipa/ManifestCache.plist
dyld: Library not loaded: @rpath/XCTest.framework/XCTest
  Referenced from: /var/containers/Bundle/Application/4492CC47-E278-4D20-93DD-B9FF170479C8/WebDriverAgentRunner-Runner.app/XCTRunner
  Reason: no suitable image found.  Did find:
    /private/var/containers/Bundle/Application/4492CC47-E278-4D20-93DD-B9FF170479C8/WebDriverAgentRunner-Runner.app/Frameworks/XCTest.framework/XCTest: code signing blocked mmap() of '/private/var/containers/Bundle/Application/4492CC47-E278-4D20-93DD-B9FF170479C8/WebDriverAgentRunner-Runner.app/Frameworks/XCTest.framework/XCTest'
    /private/var/containers/Bundle/Application/4492CC47-E278-4D20-93DD-B9FF170479C8/WebDriverAgentRunner-Runner.app/Frameworks/XCTest.framework/XCTest: code signing blocked mmap() of '/private/var/containers/Bundle/Application/4492CC47-E278-4D20-93DD-B9FF170479C8/WebDriverAgentRunner-Runner.app/Frameworks/XCTest.framework/XCTest'
2017-03-15 11:18:27.561 xcodebuild[1602:8414] Error Domain=IDETestOperationsObserverErrorDomain Code=5 "Early unexpected exit, operation never finished bootstrapping - no restart will be attempted" UserInfo={NSLocalizedDescription=Early unexpected exit, operation never finished bootstrapping - no restart will be attempted}

Testing failed:
    Test target WebDriverAgentRunner encountered an error (Early unexpected exit, operation never finished bootstrapping - no restart will be attempted)
** TEST FAILED **
6853
2106laiyuncong8404 回复

看提示,上面说没有运行bootstrap

2106
6853codeskyblue 回复

dyld: Library not loaded: @rpath/XCTest.framework/XCTest
github上有人提了这个issue,但是被关闭了,说升级到1.6.4可以。但是我这不行啊。
https://github.com/Carthage/Carthage/issues/756
dyld: Library not loaded: @rpath/XCTest.framework/XCTest
Referenced from: /var/containers/Bundle/Application/4492CC47-E278-4D20-93DD-B9FF170479C8/WebDriverAgentRunner-Runner.app/XCTRunner
Reason: no suitable image found. Did find:

另外,这个路径我也打不开啊
/var/containers/
这两个我倒是能找到,这个bundle到底有什么用啊?
state->old_bundle: /var/folders/f3/fsxd3f315vg22yc0997bxrl00000gp/C/com.apple.DeveloperTools/All/Xcode/EmbeddedAppDeltas/b52998ac4571334a6ce75968a8a691a2/e01d730b625c83ad877fb699701bc35ea3e800ec/WebDriverAgentRunner-Runner.app
state->new_bundle: /Users/xiaoxue/Library/Developer/Xcode/DerivedData/WebDriverAgent-brdadhpuduowllgivnnvuygpwhzy/Build/Products/Debug-iphoneos/WebDriverAgentRunner-Runner.app

2106

不用xcodebuild tools,而从gui到xcode里运行测试的话,报错如下,说明还没有到运行bootstrap的程度,payload就挂了。

8楼 已删除
9楼 已删除
15931

得到的IP打不开

15498

大赞,成功了

2106

虚拟机里可以跑成功,真机不行。

跑模拟器Xcode Debug的log:

2017-04-06 13:47:40.352 XCTRunner[4833:113945] Running tests...
2017-04-06 13:47:48.499 XCTRunner[4833:113945] Continuing to run tests in the background with task ID 1
Test Suite 'All tests' started at 2017-04-06 13:47:48.672
Test Suite 'WebDriverAgentLib.framework' started at 2017-04-06 13:47:48.674
Test Suite 'WebDriverAgentLib.framework' passed at 2017-04-06 13:47:48.674.
     Executed 0 tests, with 0 failures (0 unexpected) in 0.000 (0.001) seconds
Test Suite 'WebDriverAgentRunner.xctest' started at 2017-04-06 13:47:48.676
Test Suite 'UITestingUITests' started at 2017-04-06 13:47:48.677
Test Case '-[UITestingUITests testRunner]' started.
    t =     0.00s     Start Test at 2017-04-06 13:47:48.678
    t =     0.00s     Set Up
2017-04-06 13:47:48.685 XCTRunner[4833:113945] Built at Apr  6 2017 11:53:41
2017-04-06 13:47:48.705 XCTRunner[4833:113945] ServerURLHere->http://192.168.199.187:8100<-ServerURLHere
    t =    47.95s     Find the Application "local.pid.4769" 0x6080002a69c0
    t =    47.95s         Snapshot accessibility hierarchy for local.pid.4769

本地访问server后返回:

{
  "value" : "Unhandled endpoint: \/ -- http:\/\/192.168.199.187:8100\/ with parameters {\n    wildcards =     (\n        \"\"\n    );\n}",
  "sessionId" : "41A81AA0-6090-4419-9D81-C1EFA27ACD59",
  "status" : 1
}

本地访问status返回:

{
  "value" : {
    "state" : "success",
    "os" : {
      "name" : "iOS",
      "version" : "10.3"
    },
    "ios" : {
      "simulatorVersion" : "10.3",
      "ip" : "192.168.199.187"
    },
    "build" : {
      "time" : "Apr  6 2017 11:53:42"
    }
  },
  "sessionId" : "41A81AA0-6090-4419-9D81-C1EFA27ACD59",
  "status" : 0
}

本地访问inspector截图:

跑真机时Xcode Debug的Log:

dyld: Library not loaded: @rpath/XCTest.framework/XCTest
  Referenced from: /var/containers/Bundle/Application/67D95C0C-0253-4654-A88B-1C646458E939/WebDriverAgentRunner-Runner.app/XCTRunner
  Reason: no suitable image found.  Did find:
    /private/var/containers/Bundle/Application/67D95C0C-0253-4654-A88B-1C646458E939/WebDriverAgentRunner-Runner.app/Frameworks/XCTest.framework/XCTest: code signing blocked mmap() of '/private/var/containers/Bundle/Application/67D95C0C-0253-4654-A88B-1C646458E939/WebDriverAgentRunner-Runner.app/Frameworks/XCTest.framework/XCTest'
    /private/var/containers/Bundle/Application/67D95C0C-0253-4654-A88B-1C646458E939/WebDriverAgentRunner-Runner.app/Frameworks/XCTest.framework/XCTest: code signing blocked mmap() of '/private/var/containers/Bundle/Application/67D95C0C-0253-4654-A88B-1C646458E939/WebDriverAgentRunner-Runner.app/Frameworks/XCTest.framework/XCTest'
(lldb) 

试过很多方法,现在怀疑是Xcode的问题
虽然我的Xcode从8.2.1升级到了8.3,iOS从10.0.2升级到了10.3和10.3.1,但都没有解决:(
https://github.com/facebook/WebDriverAgent/issues/429
https://github.com/facebook/WebDriverAgent/issues/521

现在我该怎么办?

6853
2106laiyuncong8404 回复

marekcirkos大神说让你重启电脑

2106
6853codeskyblue 回复

试过了,重启Mac和iPhone都无效啊😭

6853 codeskyblue 基于 WebDriverAgent 的 iOS 远程控制 中提及了此贴 06月02日 15:52
31a663


无论真机还是模拟器运行都提示这个,求大神帮助呀~~

6853 codeskyblue ATX 资料快速索引 中提及了此贴 06月21日 19:39
1134
2106laiyuncong8404 回复

请问您的这个xctest的问题解决了吗?我买了开发者账号之后也卡在这里了,网上找了很多资料,对xctest.framework重签名也没用,请问有解决方案了吗? 万分感谢

8680e6

使用 “http://localhost:8100/staus” 和 “http://localhost:8100/source” 都有数据返回,并且返回的内容都是对的,但是在浏览器里打开 “http://localhost:8100/inspector” ,页面显示空白,没有任何信息。
从端口输出看到的错误如下:
accepted connection, fd = 4
waiting for connection
accepted connection, fd = 6
waiting for connection
Number of available devices == 1
Requesting connecion to device handle == 1 (serial: a43c429e49bb9862d018b9ee39c662c0d4cc6481), port 8100
Number of available devices == 1
Requesting connecion to device handle == 1 (serial: a43c429e49bb9862d018b9ee39c662c0d4cc6481), port 8100
run_ctos_loop: fd = 6
run_ctos_loop: fd = 4
run_stoc_loop: fd = 6
run_stoc_loop: fd = 4
recv failed: Resource temporarily unavailable
recv failed: Resource temporarily unavailable
recv failed: Operation not permitted
MAC系统版本是 10.12,iOS版本 10.2,Xcode版本是8.3,辛苦大神帮忙看下是什么问题

6853
8680e6zczq123 回复

估计是没有编译build.js吧

F1af1d chaozhangpower Appium 1.6.5 and ios 10.3.3 真机测试 中提及了此贴 07月21日 15:11
2106
1134weamylady 回复

没解决,暂时搁置了😞

6853
2106laiyuncong8404 回复


解决方案已经更新了

2106
6853codeskyblue 回复

这个我最早就试过用个人证书,也更改了BundleID,没效果。
后来我又更换成企业证书,也改了BundleID,还是没效果。
今天把Xcode升级到8.3.3,也还是一样的错误。
我用macaca的XCTestWD,还是这个问题,绕不过去的坎,心塞。😖

6853
2106laiyuncong8404 回复

你还是换个电脑吧

2106
6853codeskyblue 回复

😟 关键是不能保证换电脑就能解决啊。

2106
6853codeskyblue 回复

大哥,我解决了,呜呜呜~
https://testerhome.com/topics/8820#reply47

1134
2106laiyuncong8404 回复

我的解决了,上wda官网,重新下载那些包就行了。

25f875
1134weamylady 回复

WDA官网是什么?不是都从Git上面下吗?

25f875

安装依赖会报错:
./Scripts/bootstrap.sh

Fetching dependencies
Building Inspector
Creating bundle directory...
Fetching Inspector dependencies...
npm WARN deprecated css-list@0.1.3: Deprecated.
npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN web-driver-inspector@1.0.0 No repository field.

npm ERR! code EINTEGRITY
npm ERR! sha1-iXSDlvnXQZ1fon3ztIhy2tv4MYo= integrity checksum failed when using sha1: wanted sha1-iXSDlvnXQZ1fon3ztIhy2tv4MYo= but got sha1-xS7cVf1/ntQkN1oDgj2kv8mwIMk=. (152617 bytes)
求一发解决方案

25f875
2106laiyuncong8404 回复

大哥,WDA也是这么解决吗?

25f875
1134weamylady 回复

Error Domain=IDETestOperationsObserverErrorDomain Code=6 "Early unexpected exit, operation never finished bootstrapping - no restart will be attempted" UserInfo={NSLocalizedDescription=Early unexpected exit, operation never finished bootstrapping - no restart will be attempted}

Testing failed:
Test target WebDriverAgentRunner encountered an error (Early unexpected exit, operation never finished bootstrapping - no restart will be attempted)
这个错误怎么解决啊,我看文档说要信任WebDriverAgentRunner ,但是我手机根本在设备管理就没发现WebDriverAgentRunner 的证书啊??求指点

1134
25f875yxys01 回复

我用的是开发者账号的证书打包的,你的错误还是百度一下看看?

25f875
1134weamylady 回复

我也是用开发者账号证书打包的。。。
我大概解决了这个问题,方法在这里 https://testerhome.com/topics/9666 不知道还有其他解决方案没有。

1134
25f875yxys01 回复

我们还没有大规模使用,目前主要在预言ios远程真机,想结合ios minicap和WebdriverAgent来搞~~

25f875
1134weamylady 回复

我现在也在攻坚这个问题。。。但是我只有一个人在做这个,但是好难啊。感觉从百度MTC做了远程真机开始,现在好像大家都准备搞这个。

1134
25f875yxys01 回复

目前技术上的难点已经解决,看了ios minicap 源码,直接连接它的服务端不停发截图过来就可以回显了。WebdriverAgent也可以直接用WebSocket通讯发送命令就行了。就是现在缺少技术栈~~还需要人力和时间啊!有空多交流交流

25f875
1134weamylady 回复

有空多交流啊,我现在也是技术难关卡到不知道怎么去实现iPhone的触屏事件

1134
25f875yxys01 回复

这个很简单,给你一段代码参考一下,是论坛大神写的wdaproxy上的:
https://github.com/openatx/wdaproxy

tap: function(x, y) {
          var self = this;
          return $.ajax({
            url: "/session/" + self.sessionId + "/wda/tap/0",
            method: "POST",
            data: JSON.stringify({
              x: x,
              y: y
            }),
          }).then(function(ret) {
            if (ret.status !== 0) {
              console.log(ret.value);
            } else {
              return "Success";
            }
          })
        },

initScreenSize: function() {
          $.\
          ({
              url: "/status",
            })
            .then(function(ret) {
              this.sessionId = ret.sessionId;
              return $.ajax({
                url: "/session/" + ret.sessionId + "/window/size",
              })
            }.bind(this))
            .then(function(ret) {
              this.display.width = ret.value.width;
              this.display.height = ret.value.height;
            }.bind(this))
        },
25f875
1134weamylady 回复

soga,其实大神的wdaproxy我也用过,但是WDA有一部分,真机总是使用不了,报错为operation never finished bootstrapping,本来根据我的方法重启后已经能够运行WDA了,但是wdaproxy还是显示502 Bad,不知道是不是需要连接到什么?

1134
6853codeskyblue 回复

66666

25f875
1134weamylady 回复

你这段在哪个文件里面的~~~我找半天没找到

6853
25f875yxys01 回复

wdaproxy的源码里面

25f875
1134weamylady 回复

话说你的WDA是appium一起下的还是单独从Facebook的GitHub上git下来的哦?

6853
25f875yxys01 回复

我是单独下载的

1134
25f875yxys01 回复

Appium包里面的先试试好不好使,不好使就自己下一个。

25f875
1134weamylady 回复

主要我最开始是直接输入./Scripts/bootstrap.sh ,依赖下载不下来
后面

mkdir -p Resources/WebDriverAgent.bundle
sh ./Scripts/bootstrap.sh

就能下载依赖了,而使用就要靠重启iPhone了

10674

http://10.242.43.120:8100/status,访问一直是超时状态,已经参考文章方法将端口转发了,还是不好使,求指教
➜ ~ iproxy 8100 8100
waiting for connection

503ffd

模拟器安装了webdriveragent后,我获取不了ip地址,求助大佬

6853
503ffdaiyanyuan 回复

模拟器就是localhost

10764

卡在webdriveragent启动了,别人都是启动的8100,我这边直接启动的0端口。。
2017-11-23 17:12:41.908748+0800 WebDriverAgentRunner-Runner[487:102322] Built at Nov 21 2017 13:57:28
2017-11-23 17:12:41.984063+0800 WebDriverAgentRunner-Runner[487:102322] ServerURLHere->http://11.1.1.104:0<-ServerURLHere

36ac1f

不知道是否遇到过一下情况:

使用xcode运行正常,然后在console获得
192.168.59.112:8100这个信息

在浏览器中访问http:192.168.59.112/status时,一直在加载;

已经安装了imobiledevice,并且使用iproxy进行设置,这个问题依然存在。。。

156e5d
36ac1f__Luke 回复

重新安装下appium和配置WebDriverAgent(建议使用付费版开发者账号)就可以了,可以参照:https://testerhome.com/topics/8375

3567
10764cloudwind 回复

有解决么? 我也遇到相同问题了

62楼 已删除
3567
156e5dslideplustest 回复

Work for me. Thx.

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