selenium下載地址統計:
chromedriver:http://chromedriver.storage.googleapis.com/index.html?path=2.31/
geckodriver: https://github.com/mozilla/geckodriver/releases
一.selenium框架結構
selenium 分為三大架構:SeleniumIDE、Selenium WebDriver、Selenoium Grid
- Selenium IDE:錄制和回放腳本,可以模擬用戶對頁面的真實操作,區別於其他工具:是通過攔截http請求。
- 一般只把錄制腳本當作一個輔助功能,因為一個UI節點的細微變化,都可能導致自動化測試工具無法識別,當測試項目項目大時,定位、更新十分困難。
- 其次,錄制的腳本有時候人工難以理解。
- Selenium Grid:實現在多台機器上、和異構環境中並行執行測試用例。並行執行不僅節省時間,而且可以同時在不同的瀏覽器、平台上運行自動化測試腳本。
- Selenium Web Driver:針對各個瀏覽器而開發,通過原生瀏覽器支持或者擴展(Chrome webDrive、FireFox WebDriver)直接控制瀏覽器
VS Selenium RC(Selenium1.0):在瀏覽器中運行javaScript,使用瀏覽器內置的JavaScript來翻譯和執行selense
二、selenium運行機制,(基於firefox)
為了方便講解,下面將會基於firefox進行講解。
2.1 基礎知識
1.瀏覽器內核
“瀏覽器內核”主要指渲染引擎(Rendering Engine),負責解析網頁語法(如HTML、JavaScript)並渲染、展示網頁。因此,所謂的瀏覽器內核通常也就是指瀏覽器所采用的渲染引擎,渲染引擎決定了瀏覽器如何顯示網頁的內容以及頁面的格式信息。不同的瀏覽器內核對網頁編寫語法的解析也有所不同,因此同一網頁在不同的內核瀏覽器里的渲染、展示效果也可能不同。
瀏覽器內核種類繁多,商用的加上非商業的免費內核,大約會超過10款,目前主流的四大瀏覽器內核Trident、Gecko、WebKit以及Presto。Gecko就是firefox的內核。
2.Marionette
Marionette是Mozilla的Gecko引擎的自動化驅動程序。它可以遠程控制Gecko平台(如Firefox)的UI或內部JavaScript。它可以控制chrome(即菜單和功能)或內容(瀏覽上下文中加載的網頁),提供高水平的控制和復制用戶操作的能力。除了在瀏覽器上執行操作之外,Marionette還可以讀取DOM的屬性和屬性。
3.geckodirver
geckodriver是Selenium FirefoxDriver的下一代。它是由Marionette支持的Geodo / Firefox遠程協議。使用W3C WebDriver協議兼容客戶端與基於Gecko的瀏覽器交互的代理。可見:它是充當本地和遠程之間的代理,並將呼叫轉換為Firefox遠程協議。
2.2 selenium運行機制-----webDdriver模式
webDriver是按照client/server模式設計的。client是我們的測試腳本,發送請求;server就是打開的瀏覽器,用來接收client的請求並作出響應。
具體的工作流程:
- webDriver調用geckodriver程序打開瀏覽器並綁定到指定端口。啟動的瀏覽器作為遠程服務器remote server
- client通過CommandExecuter json 一段字符串給遠程服務器的偵聽端口(the wire protocal)
- 遠程服務器根據原生的瀏覽器組件將字符串轉化為瀏覽器的本地(native)調用
所以web Driver用到的協議:
- 打開瀏覽器時:HTTP協議
- client端發送json請求到遠程服務器的偵聽端口:the wire protocol
其中:
- 有線協議:指的是從點到點獲取數據的方式,是應用層的協議。
- HTTP協議:是用於從服務器傳輸超文本標記語言HTML到客戶端的通信協議。是一個應用層協議,由請求/響應構成,是一個標准的客戶/服務器模式。是一個無狀態的協議。(無狀態:對事務沒有記憶能力,不會保存這次傳輸的信息——節約內存)