selenium
早期的selenium
早期的selenium主要是指selenium1.0的版本,
這個版本主要由Selenium IDE + Selenium Grid + SeleniumRC組成
seleniumRC就是后來被webdriver取代的一個代理server
RC == Remote Control 遠程控制
早期Selenium 引入了 Remote Control Server 這樣一個代理 Server,JavaScript 腳本注入和與 Server 通訊都通過這個代理 Server 來進行,JavasScript可以獲取並調用頁面的任何元素,Selenium啟動一個Server,將操作Web元素的API調用轉化為一段段JavaScript,在Selenium內核啟動瀏覽器之后注入這段JS
缺點:但是JS注入速度不理想,穩定性大大依賴於Selenium內核對API翻譯成的JS質量高低
引入代理Remote Control Server是因為“同源策略”的限制,通過這個代理服務器來“欺騙”遠程Server,達到使其以為是從同一個地方load代碼以正確返回請求數據的效果
seleniumRC的原理
Selenium RC Server 啟動一個瀏覽器(或是已經使用中),並注入js代碼
將測試腳本代碼傳到客戶端的 Selenium-Core 中
Selenium-Core 翻譯並解析執行用戶錄制的操作
讓代理 Server 進行通訊
Remote Control Server 負責跟遠程 Web 應用服務器進行通訊
seleniumRC的組成
Selenium Server(Launcher、Http Proxy、Selenium Core)
Client Libraries(用來控制server)
seleniumRC的工作流程
測試用例通過Client Libraries的接口向Selenium Server發送Http請求,要求和Selenium Server建立連接
Selenium Server的Launcher啟動瀏覽器,把Selenium Core加載入瀏覽器頁面中,並發瀏覽器的代理設置為Selenium Server的Http Proxy。
測試用例通過Client Libraries的接口向Selenium Server發送Http請求,Selenium Server對請求進行解析,然后通過Http Proxy發送JS命令通知Selenium Core執行操作瀏覽器的動作
Selenium Core接收到指令后,執行操作
瀏覽器收到新的頁面請求信息,於是發送Http請求,請求新的web頁面。Selenium Server會接收到所有由它啟動的瀏覽器發動的請求
Selenium Server接收到瀏覽器發送的Http請求后,自己重組Http請求,獲取對應的web頁面
Selenium Server的Http Proxy把接收的Web頁面返回給瀏覽器
現在的selenium
selenium3.0以后移除了seleniumRC,取而代之的是webdriver
用一張圖來展示selenium3.0的運行原理
這里講到的是測試腳本和瀏覽器的交互,客戶端開始運行驅動瀏覽器的腳本的時候,這時瀏覽器收到請求開始啟動並開啟偵聽端口,並自動創建session,保持瀏覽器和對應客戶端的會話連接,然后客戶端運行腳本,向瀏覽器發送http請求,瀏覽器解析請求,根據腳本內容做出相應操作,返回response。這時客戶端根據response選擇結束還是繼續執行
tips:
webdriver操作瀏覽器、頁面采用的協議:the webdriver wire protocol
Client和Server的通信協議:HTTP
HTTP傳輸的數據內容為遵循WP協議json格式數據
瀏覽器驅動實現了webdriver協議的api
appium
appium和selenium之間的不同
appium本身就是一個server,而selenium廢棄了server,用webdriver來驅動瀏覽器
appium工作原理
當開啟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的幾個概念
appium/appium server
一般所說的appium其實是一個基於node.js的web服務器,它是測試腳本和設備端交互的橋梁
用npm install -g appium 安裝的是命令行的沒有界面的appium server
appium GUI
它是把沒有界面的appium server封裝出了一個圖形界面,方便操作,但是現在已經被appium desktop所取代
appium Desktop
它是一款適用於Mac,Windows和Linux的開源應用程序,它以美觀而靈活的用戶界面為您提供appium server的強大功能
appium client
第1點中說到,appium其實是一個sweb server,server是接收請求來操作設備端的app的,既然有了server那么一定會有client
這個client就是我們寫測試腳本時導入的包
python中可以運行 pip install Appium-Python-Client 來安裝
Android 和 iOS據的效果