一、webdriver的實現原理
webdriver原理是經典的Server-Client架構(C/S)
這裏講到的是腳本和瀏覽器的交互,client端開始運行驅動瀏覽器的腳本的時候,這是瀏覽器收到請求開始啓動並開啓偵聽端口(80),並自動創建session,保持瀏覽器和對應客戶端的會話連接,然後客戶端運行腳本,向瀏覽器發送http請求,瀏覽器解析請求,根據腳本內容做出相應操作,返回response。這時client端根據response選擇結束還是繼續執行。
- webdriver操作瀏覽器、頁面採用的協議:the webdriver wire protocol
- Client和Server的通信協議:HTTP
- HTTP傳輸的數據內容爲遵循WP協議json格式數據
二、appium的工作原理
appium的原理也是C/S架構的形式,appium本身就是一個遠程服務器,appium中的Json wire protocol繼承自selenium的webdriver wire protocol,並進行了擴展,使得Json wire protocol能夠控制不同的移動設備的行爲。
當開啓appium服務器的同時就開啓了監聽端口;我們運行腳本的時候,調用任何的appiumAPI,都會向Appium Server端post一條HTTP請求,請求內容就是根據webdriver wire protocol協議規定的一條JSON格式的數據;Appium Server端接收到請求後,解析出JSON數據併發送到手機端;手機端上已經由BootStrap.jar(iOS爲BootStrip.js)開啓的socket服務器監聽相應的端口,BootStrap.jar在appium每個session第一次訪問手機端的時候會自動安裝;手機端接收到對應的請求後,通過BootStrap.jar翻譯成UIAutomator能執行的命令,然後通過UIAutomator處理並操作APP完成測試。
appium在Android的工作原理
-
client端也就是我們 test script是我們的webdriver測試腳本。
-
中間是起的Appium的服務,Appium在服務端起了一個Server(4723端口),跟selenium Webdriver測試框架類似, Appium⽀持標準的WebDriver JSONWireProtocol。在這裏提供它提供了一套REST的接口,Appium Server接收web driver client標準rest請求,解析請求內容,調⽤用對應的框架響應操作。
-
appium server會把請求轉發給中間件Bootstrap.jar ,它是用java寫的,安裝在手機上.Bootstrap監聽4724端口並接收appium 的命令,最終通過調⽤用UiAutomator的命令來實現。
-
最後Bootstrap將執行的結果返回給appium server。
-
appium server再將結果返回給 appium client。
appium在ios的工作原理
在IOS端,appium同樣使⽤WebDriver的一套協議。與Android端測試框架不同的是,appium ios封裝了apple的 Instruments框架,主要用了Instrument裏的UI Automation(Apple的自動化測試框架),然後在設備中注⼊入bootstrap.js進行監聽。
-
client端 依然是 test script是我們的webdriver測試腳本。
-
中間是起的Appium的服務,Appium在服務端起了一個Server(4723端口),跟selenium Webdriver測試框架類似, Appium⽀持標準的WebDriver JSONWireProtocol。在這裏提供它提供了一套REST的接口,Appium Server接收web driver client標準rest請求,解析請求內容,調⽤用對應的框架響應操作。
-
appium server調用instruments.js 啓動⼀一個socket server,同時分出一個⼦子進程運⾏instruments.app,將bootstrap.js(一個UIAutomation腳本)注⼊入到device⽤於和外界進行交互
-
最後Bootstrap.js將執行的結果返回給appium server
-
appium server再將結果返回給 appium client。
android與ios區別在於appium 將請求轉發到bootstrap.js或者bootstrap.jar.然後由bootstrap 驅動UIAutomation和UiAutomator去devices上完成具體的動作。