Selenium2原理


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,如下圖截圖:

參考資料

[1] selenium webdriver的原理

http://www.51testing.com/html/95/477695-846433.html

[2]Selenium源碼分析之WebDriver

http://blog.csdn.net/ant_ren/article/details/7970793.html

[3]selenium及webdriver的原理

http://www.cnblogs.com/sunada2005/archive/2013/12/22/3486314.html

http://blog.csdn.net/ant_ren/article/details/7968582

http://blog.csdn.net/ant_ren/article/details/7970793

這里作者初步畫了一個圖來表示各種WebDriver的工作原理:

從上圖中我們可以看出,不同瀏覽器的WebDriver子類,都需要依賴特定的瀏覽器原生組件,例如Firefox就 需要一個add-on名字叫webdriver.xpi。而IE的話就需要用到一個dll文件來轉化Web Service的命令為瀏覽器native的調用。另外,圖中還標明了WebDriver Wire協議是一套基於RESTful的web service。如果不明白什么是RESTful的,可以參見作者之前另外一篇介紹REST的blog(http://blog.csdn.net/ant_yan/article/details/7963517)

關於WebDriver Wire協議的細節,比如希望了解這套Web Service能夠做哪些事情,可以閱讀Selenium官方的協議文檔


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM