其中
[MJSONWP] 打印的是S內部的處理日志。
[JSONWP Proxy] 打印的是S/D之間的通信日志。
可以看到,Client、Server、Device是通過Http協議通信的,大致流程為:
Client通過http協議,將指定格式的命令發送給server。server調用中間層AppiumDriver解析命令,發送給實際的處理者。實際處理者依據平臺、版本不同而不一樣,這里是XCUITest(iOS)。而Device(iphone、模擬器)和Server的通訊也是通過http協議。
到這里,大家會有疑問了,Server怎么找到對應的Device,他們之間如何通過Http通訊的?這里就要引出WebDriverAgent。它的作用:
WebDriverAgent 在 iOS 端實現了一個 WebDriver server ,借助這個 server 我們可以遠程控制 iOS 設備。
參考
WDA的inspector演示:直接在瀏覽器端打開 http://192.168.0.105:8100/inspector
再看TextField賦值java代碼elem.sendKeys(String.valueOf(rndNum));
的執行步驟
[HTTP] --> POST /wd/hub/session/94f7526c-94ba-4ece-8740-d94bd3d4f50f/element/1A29AE60-5433-4B52-83F8-B4E2C794972E/value {"id":"1A29AE60-5433-4B52-83F8-B4E2C794972E","value":["1"]}
[MJSONWP] Calling AppiumDriver.setValue() with args: [["1"],"1A29AE60-5433-4B52-83F8-B4E2C794972E","94f7526c-94ba-4ece-8740-d94bd3d4f50f"]
[debug] [XCUITest] Executing command 'setValue'
[JSONWP Proxy] Proxying [GET /element/1A29AE60-5433-4B52-83F8-B4E2C794972E/attribute/type] to [GET http://localhost:8100/session/79CBBB84-DB6E-48BA-B79F-91539E1E4708/element/1A29AE60-5433-4B52-83F8-B4E2C794972E/attribute/type] with no body
[JSONWP Proxy] Got response with status 200: "{\n \"value\" : \"XCUIElementTypeTextField\",\n \"sessionId\" : \"79CBBB84-DB6E-48BA-B79F-91539E1E4708\",\n \"status\" : 0\n}"
[debug] [BaseDriver] Set implicit wait to 0ms
[debug] [BaseDriver] Waiting up to 0 ms for condition
[JSONWP Proxy] Proxying [POST /element] to [
原文轉自:http://www.jianshu.com/p/aae160cb9cc4