Selenium 實現 Web 自動化的原理 (軟件測試52講學習筆記)


Selenium 1.0 的工作原理

  Selenium 1.0,又稱Selenium RC ,RC是Remote Control的縮寫。Selenium RC利用的原理:JavaScript代碼可以方便的獲取頁面上的任意元素並執行各種操作。

  但是因為“同源政策(Same-origin policy)”(只有來自相同域名、端口和協議的javaScript代碼才能被瀏覽器執行),所以,要想在測試用例運行中的瀏覽器中,注入javascript代碼,從而實現自動化web操作,Selenium RC必須“欺騙”被測站點,讓它誤以為被注入的代碼是同源的。

  那如何實現“欺騙”呢?這就是需要引入 Selenium RC Server 的原因了。其中的 Http Proxy 模塊就是來「欺騙」瀏覽器的。除了 Selenium RC Server,Selenium RC 方案的另一部分就是 Client Libraries。他們的具體關系如下圖1所示:

 

圖1 Selenium RC 的基本模塊

Selenium RC Server,主要包括Selenium Core,Http Proxy 和Launcher 三部分:

  • Selenium Core,是被注入到瀏覽器頁面中的JavaScript 函數集合,用來實現界面元素的識別和操作;

  • Http Proxy,作為代理服務器修改JavaScrip的源,以達到“欺騙”被測站點的目的;

  • Launcher,用來在啟動測試瀏覽器時完成,Selenium Core 的注入和瀏覽器代理的設置。

Client Libraries,是測試用例代碼向Selenium RC Server發送 Http 請求的接口,支持多種語言,包括 Java、C# 和 Ruby 等。

  Selenium執行流程圖,如圖2:

 

                         圖2 Selenium RC 的執行流程

  1. 測試用例通過基於不同語言的 Client Libraries向 Selenium RC Server 發送Http請求,要求與其建立連接。

  2. 連接建立后,Selenium RC Server 的Launcher 就會啟動瀏覽器或者重用之前已經打開的瀏覽器,把 Selenium Core(JavaScript 函數的集合)加載到瀏覽器頁面當中,並同時把瀏覽器的代理設置為Http Proxy。

  3. 測試用例通過 Client Libraries,向 Selenium RC Server 發送 Http請求,Selenium RC Server 解析請求,然后通過 Http Proxy 發送 JavaScript命令通知 Selenium Core 執行瀏覽器上控件的具體操作。

  4. Selenium Core 接收到指令后,執行操作。
  5. 如果瀏覽器收到新的頁面請求信息,則會發送 Http 請求來請求新的 Web 頁面。由於 Launcher 在啟動瀏覽器時把 Http Proxy 設置成為了瀏覽器的代理,所以 Selenium RC Server 會接收到所有由它啟動的瀏覽器發送的請求。

  6. Selenium RC Server 接收到瀏覽器發送的 Http 請求后,重組 Http 請求以規避“同源策略”,然后獲取對應的 Web 頁面。

  7. Http Proxy 把接收的 Web 頁面返回給瀏覽器,瀏覽器對接收的頁面進行渲染。

Selenium 2.0 的工作原理

  Selenium 2.0,又稱 Selenium WebDriver,其原理是:使用瀏覽器原生的 WebDriver 實現頁面操作。實現方式完全不同於 Selenium 1.0。Selenium WebDriver 是典型的 Server-Client 模式,Server 端就是 Remote Server。以下是 Selenium 2.0 工作原理:

圖3 Selenium WebDriver 的執行流程

  1. 當使用 Selenium 2.0 啟動瀏覽器時,后台會同時啟動基於 WebDriver Wire 協議的 Web Service 作為 Selenium 的 Remote Server,並與瀏覽器綁定。之后,Remote Server 就開始監聽 Client 端的操作請求;
  2. 執行測試時,測試用例會作為 Client 端,將需要執行的頁面操作請求以 Http Request 的方式發送給 Remote Server 。該 Http Request 的 body,是以 WebDriver Wire 協議規定的 JSON 格式來描述需要瀏覽器執行的具體操作;
  3. Remote Server 接收到請求后,會對請求進行解析,並將解析結果發給 WebDriver,由WebDriver 實際執行瀏覽器的操作;
  4. WebDriver 可以看做是直接操作瀏覽器的原生組件(Native Component),所以搭建測試環境時,通常都需要先下載瀏覽器對應的 WebDriver。

 

 


免責聲明!

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



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