Selenium原理精講
您可以使用多個編程語言編寫測試(目前支持的語言有Java,Python,Ruby, C#),并且 Selenium 能夠在一個或多個瀏覽器中執(zhí)行這些測試。Selenium最常用的版本是Selenium2和Selenium3。大家可以理解為selenium3是selenium2的升級版本,主要更新內(nèi)容如下:
- 去掉了對selenium rc的支持
- 全面擁抱java 8。 如果你需要使用selenium的java binding話,那么你就必須使用java 8了。
- 支持macOS (Sierra or later),支持官方的safaridriver。
- 通過ms官方的webdriver server支持Edge瀏覽器。只支持ie 9.0版本以上。
- 通過Mozilla官方的geckodriver來支持firefox?;鸷鼜?7版本開始使用Gecko引擎,該引擎支持多進程。
- 簡單點講就是如果你想要測試自己的產(chǎn)品在最新版本瀏覽器中的運行情況,必須使用selenium3!
下面我就為大家詳解selenium的兩個核心問題:
1.支持多種語言;
2.可以在多個瀏覽器中運行腳本
Selenium的架構(gòu)可以用下面的圖進行概況

藍色的圖Selenium Language Binding就是我們平時使用的編碼語言,包括java、python等等。可以看到這些語言并沒有直接與Browser Drivers進行通信,而是通過了JSON Wire
Protocol,這就是webdriver協(xié)議 ,詳情請參考https://www.w3.org/TR/webdriver/ 。
簡單的說他定義了一套接口規(guī)范,以我們最熟悉的點擊操作為例,他對應的接口協(xié)議是:
POST /session/{session id}/element/{element id}/click
這樣以來,無論我們編碼使用python代碼來執(zhí)行點擊操作:
driver.find_element_by_id("").click()
還是以java代碼執(zhí)行點擊操作:
driver.findElement(By.id("")).click();
都會通過selenium客戶端的程序?qū)lick操作轉(zhuǎn)化成對應的webdriver協(xié)議。這樣對于Browser Drivers來說只需要解析具體協(xié)議,而無需關(guān)注客戶端使用的是哪種代碼了,這就是selenium支持多種語言的原理。
在Browser Drivers中可以看到各個瀏覽器的driver,這里我們以chromedriver為例進行講解。在代碼中直接 new ChromeDriver() 將會啟動一個 ChromeDriver進程,ChromeDriver是一個獨立的服務,它是 google 為網(wǎng)站開發(fā)人員提供的自動化測試接口,它是 selenium 和 chrome瀏覽器進行通信的橋梁。chromeDriver解析webdriver協(xié)議,然后根據(jù)解析結(jié)果,調(diào)用與之對應的Remote Debugging協(xié)議來操控chrome瀏覽器,它可以和瀏覽器內(nèi)核進行交互進而操控瀏覽器,這里就不對該協(xié)議進行詳細介紹了,以上就是selenium操控chrome瀏覽器的原理。
以此類推,大家就會了解為什么使用selenium2和3操控不同的瀏覽器,需要先下載與其對應的瀏覽器driver了。