Selenium 經歷了兩個版本,Selenium 1.0 和 Selenium 2.0,本文僅介紹Selenium2的原理,在Selenium 2.0 主推的是WebDriver,Selenium2又名Selenium Webdriver。
Selenium2簡介
Selenium是一個用于Web應用程序測試的工具,支持多平臺、多瀏覽器、多語言去實現自動化測試,Selenium2將瀏覽器原生的API封裝成WebDriver API,可以直接操作瀏覽器頁面里的元素,甚至操作瀏覽器本身(截屏,窗口大小,啟動,關閉,安裝插件,配置證書之類的),所以就像真正的用戶在操作一樣。
Webdriver的一個簡單的架構圖,如下圖所示:
Selenium2原理
webdriver是按照server–client的經典設計模式設計的:?
server端就是remote server,可以是任意的瀏覽器:我們的腳本啟動瀏覽器后,該瀏覽器就是remote server,它的職責就是等待client發送請求并做出相應;?
client端簡單說來就是我們的測試代碼:們測試代碼中的一些行為,比如打開瀏覽器,轉跳到特定的url等操作是以http請求的方式發送給被server端(也就是被測瀏覽器)server接受請求,并執行相應操作,并在response中返回執行狀態、返回值等信息;
簡單介紹一下webdriver的工作原理:
- 啟動瀏覽器后,selenium-webdriver會將目標瀏覽器綁定到特定的端口,啟動后的瀏覽器則作為webdriver的remote server。
- 客戶端(也就是測試腳本),借助ComandExecutor發送HTTP請求給sever端(通信協議:The WebDriver Wire Protocol,在HTTP request的body中,會以WebDriver Wire協議規定的JSON格式的字符串來告訴Selenium我們希望瀏覽器接下來做什么事情)。
- Sever端需要依賴原生的瀏覽器組件,轉化Web Service的命令為瀏覽器native的調用來完成操作。
注:
the WebDriver Wire Protocol是Selenium自己設計定義的協議,這套協議非常之強大,幾乎可以操作瀏覽器做任何事情,包括打開、關閉、最大化、最小化、元素定位、元素點擊、上傳文件等。
WebDriver Wire協議是通用的,也就是說不管FirefoxDriver還是ChromeDriver,啟動之后都會在某一個端口啟動基于這套協議的Web Service。
例如FirefoxDriver初始化成功,默認從http://localhost:7055開始IE則是http://localhost:52432,如下圖截圖: