1. 程式人生 > >Selenium之前世今生

Selenium之前世今生

端口 關閉 response 自動化測試 的人 包括 web connect 綁定

前世

Selenium RC

早期的Selenium使用的是JavaScript註入技術與瀏覽器打交道,需要Selenium RC啟動一個Server,將操作Web元素的API調用轉化為一段段Javascript,在Selenium內核啟動瀏覽器之後註入這段Javascript。開發過Web應用的人都知道,Javascript可以獲取並調用頁面的任何元素,自如的進行操作。由此才實現了Selenium的目的:自動化Web操作。這種Javascript註入技術的缺點是速度不理想,而且穩定性大大依賴於Selenium內核對API翻譯成的Javascript質量高低。

今生

WebDriver

當Selenium2.x 提出了WebDriver的概念之後,它提供了完全另外的一種方式與瀏覽器交互是。利用瀏覽器原生的API,封裝成一套更加面向對象的Selenium WebDriver API,直接操作瀏覽器頁面裏的元素,甚至操作瀏覽器本身(截屏,窗口大小,啟動,關閉,安裝插件,配置證書之類)。由於使用的是瀏覽器原生的API,速度大大提高,而且調用的穩定性交給了瀏覽器廠商本身,顯然是更加科學。然而帶來的一些副作用就是,不同的瀏覽器廠商,對Web元素的操作和呈現多少會有一些差異,這就直接導致了Selenium WebDriver要分瀏覽器廠商不同,而提供不同的實現。例如Firefox就有專門的FirefoxDriver,Chrome就有專門的ChromeDriver等等。(甚至包括了AndroidDriver和iOS WebDriver)

Selenium3.0發布後,最大更新點就是幹掉了對selenium rc的支持,這標誌著webdriver協議最終一統江湖,rc畢竟是繼子,webdriver才是親兒子,假兒子給真兒子讓路,豪門繼承權塵埃落定。

selenium3.0的意味著什麽

webdriver 協議現在已經成為業內公認的瀏覽器UI測試的標準實現。簡而言之,做瀏覽器ui測試,請認準selenium webdriver商標。各種官方支持意味著以後的瀏覽器UI測試的速度和穩定性會有較大的提升。selenium 2.0時代只有chrome driver是官方出品,其它實現均是第三方。從穩定性上說,2.0時代最穩定的測試瀏覽器是chrome和firefox,其它瀏覽器支持均或多或少有些問題。瀏覽器UI自動化測試已經成為了行業標配。這也是為什麽幾乎所有瀏覽器廠商都推出自己官方driver的原因。

RemoteWebDriver(selenium的WebDriver的基類)

啟動目標瀏覽器,並綁定到指定端口。該啟動的瀏覽器實例,做為web driver的remote server,Remote server 需要依賴原生的瀏覽器組件(如:IEDriver.dll,chromedriver.exe),來轉化瀏覽器的api調用,一些定位元素的api都在該類中。

WebDriver

webdriver是按照server – client的經典設計模式設計的。

webdriver的作用就是創建一個新的瀏覽器實例,也就是啟動一個Server端。

(Starts the service and then creates new instance of chrome driver)

server端就是我們的Remote server,也就是我們通過各個不同瀏覽器所啟動的瀏覽器實例,在我們腳本啟動瀏覽器後,這個瀏覽器就可以稱之為我們的Remote server,它的職責就是等待client發送請求並做出相應處理。

client 就是我們的測試代碼,我們測試代碼中的所有操作,比如打開瀏覽器,尋找元素,點擊都是以http請求的方式發送給被測試瀏覽器,也就是我們的Remote server,remote server接受請求,並執行相應操作,並在response中返回執行狀態、返回值等信息(這裏調用的接口是瀏覽器的源生API,而每一個瀏覽器都有自己的一套接口信息,這也就是為什麽我們要安裝不同的驅動的原因)

WebDriver工作流程

1、通過WebDriver創建一個瀏覽器服務,remote server。

2、腳本啟動時會在新的線程中啟動一個瀏覽器,並綁定特定的端口,沒個瀏覽器有不同的端口段。

3、client 創建1個session,在該session中通過http請求向remote server發送restful的請求,remote server解析請求,完成相應操作並返回response。

4、分析response,繼續執行腳本還是結束執行

command.py

Command類中定義了WebDriver的一些常用的常量。

remote\webdrvier.py

所有瀏覽器webdrvier的基類,其中包含了所有webdriver的api接口

remote\remote_connection.py

包含啟動Remote WebDrvier server,執行client請求,self._commands是selenium的核心請求參數,根據對應的Command常量,發送不同的http請求。

Page Object Model(POM)的優勢
1. POM提供了一種在UI層操作、業務流程與驗證分離的模式,這使得測試代碼變得更加清晰和高可讀性
2. 對象庫與用例分離,使得我們更好的復用對象,甚至能與不同的工具進行深度結合應用
3. 可復用的頁面方法代碼會變得更加優化
4. 更加有效的命名方式使得我們更加清晰的知道方法所操作的UI元素。例如我們要回到首頁,方法名命名為: gotoHomePage(),通過方法名即可清晰的知道具體的功能實現。

Selenium之前世今生