WebDriver是一個瀏覽器遠程控制協議,是一個既定標準,它本身的內容非常豐富,本文不可能全部介紹,本文僅粗略帶大家了解一下WebDriver的部分內容以及一個小的實際應用。想深入了解的請參考W3C文檔WebDriver.
問題背景
開發的同學都知道公司為了便于開發和測試都會有多套環境,比如dev開發環境、qa測試聯調環境、pre預發模擬線上環境、online線上環境。經常切環境也是一個比較繁瑣的事情,簡單來說,作為一個前端開發,頻率最高的操作路徑是:
1.通過SwitchHosts切換host
2.選擇目錄和網關(由于環境不夠用,但是又需要部署多套代碼。為了解決這個問題,我們利用nginx來在一臺機器上配置多個目錄,每個目錄對應不同的代碼,當你訪問這個頁面的時候,網關會記住你所選擇的目錄,進而對你的請求進行相應的轉發)
3.登錄網頁進行ui調試和接口聯調
SwitchHosts切換host還算方便,但是選擇目錄、選擇網關、打開網頁輸入用戶名密碼然后點登錄,這個過程操作頻率比較高,有點繁瑣。能不能自動化這個過程呢?熟悉自動化測試的同學對這個就非常了解了,端到端測試就是利用自動化測試套件模擬用戶訪問網頁的過程。這里我采用selenium-webdriver這個庫,通過node來執行自動化腳本,代碼如下。
那么selenium-webdriver到底是如何與瀏覽器進行交互的?如何與不同的瀏覽器進行交互呢?
下面就要引入主角了—— WebDriver, WebDriver是W3C的一個標準,它是一個標準,所以不同的瀏覽器都會有自己的實現,而selenium-webdriver是通過WebDriver協議與瀏覽器進行交互的。
WebDriver是什么
WebDriver是W3C的一個標準,是一個遠程控制協議,它提供了跨平臺和跨語言的方式來遠程操控瀏覽器,它提供了一系列接口來訪問和操作DOM,進而控制瀏覽器的行為。它使得web開發者能寫一些自動化腳本來測試網頁。
WebDriver的工作過程
(主要參考:https://blog.csdn.net/ant_ren...)
瀏覽器在啟動后會在某一個端口啟動基于WebDriver協議的Web Service,接下來我們調用WebDriver的任何api時,都需要借助一個ComandExecutor發送一個命令(也就是給監聽端口上的Web Service發送一個http請求),這個命令會告訴瀏覽器接下來要做什么。
WebDriver的實際應用
selenium-webdriver
這是一個瀏覽器自動化庫,它提供了許多瀏覽器自動化接口,用于測試web應用。
除了通過npm安裝selenium-webdriver之外,還需要安裝瀏覽器相應的驅動。
它相應的api和用法selenium-webdriver
在我們new一個WebDriver的過程中,selenium首先會確認瀏覽器的native component是否存在可用而且匹配的版本,然后就在目標瀏覽器里啟動一整套Web Service,這套Web Service使用了selenium自己設計定義的協議,名字叫做The WebDriver Wire Protocol。這套協議非常之強大,幾乎可以操作瀏覽器做任何事情,包括打開、關閉、最大化、最小化、元素定位、元素點擊、上傳文件等等。
參考資料
https://www.cnblogs.com/linbo...
https://cloud.tencent.com/dev...
http://www.cnblogs.com/sunada...