Selenium發(fā)展史
2004年Jason Huggins在ThoughtWorks公司開發(fā)內(nèi)部的時間和費用(Time and Expenses)系統(tǒng),該應(yīng)用使用了大量的JavaScript。雖然IE在當(dāng)時是主流瀏覽器,但是ThoughtWorks內(nèi)部員工還使用一些其他瀏覽器(特別是Mozilla系列),當(dāng)員工在自己的瀏覽器中無法正常運行T&E系統(tǒng)時就會提交bug。而當(dāng)時開源測試工具要么關(guān)注單一瀏覽器(通常是IE),要么是模擬瀏覽器(如HttpUnit),而購買商業(yè)工具授權(quán)的成本會耗盡T&E小型內(nèi)部項目的有限預(yù)算,所以這些測試工具都無法在項目中滿足要求。

Jason和他所在的團隊決定采用Javascript自己開發(fā)一個測試工具來驗證T&E系統(tǒng)的行為,從而發(fā)起了Selenium項目,當(dāng)時他們受到FIT(Framework for Integrated Test)的啟發(fā),使用基于表格的語法替代了原始的Javascript,這個功能對于編程經(jīng)驗有限的人來說是福音,可以在HTML文件中使用關(guān)鍵字驅(qū)動的方式來編寫測試。該工具最初稱為“Selenium”,后來稱為“Selenium Core”,在2004年基于Apache 2授權(quán)發(fā)布。


因為Selenium使用純JavaScript開發(fā),它最初設(shè)計要求開發(fā)人員把準備測試的應(yīng)用和Selenium Core、測試腳本部署在同一臺服務(wù)器上,以避免違反瀏覽器的安全規(guī)則和JavaScript沙箱策略。但是實際情況是會遇到被測試系統(tǒng)是多層架構(gòu)或者分布式架構(gòu)等,沒辦法每次都把測試腳本和selenium Core和被測試應(yīng)用放在同一臺機器上。另外沒有很好支持Selenium的IDE開發(fā)工具,針對HTML開發(fā)測試腳本整個過程非常痛苦。


因為Selenium沒有能很好以上及JavaScript沙箱策略的問題,2006年Google的工程師Simon Stewart發(fā)起了WebDriver的項目,也就是Selenium2,它把Selenium與WebDriver合并,通過WebDriver解決了Selenium存在的缺點(例如能夠繞過JavaScript沙箱,有很好的API),另外一方面增強了WebDriver可以支持廣泛的瀏覽器。到此Selenium 的發(fā)展經(jīng)歷了三個階段。


第一個階段:

Selenium1: 運行Selenium1.0程序之前,得先啟動Selenium Server端(Selenium remote control),我們簡稱 RC。RC 主要包括三個部分:launcher,http proxy,Selenium core。其中 Selenium Core 是被 Selenium server 嵌入到瀏覽器頁面中的,Selenium core 內(nèi)部是一堆 JavaScript 函數(shù)構(gòu)成,通過調(diào)用這些函數(shù)來實現(xiàn)對瀏覽器的各種操作。


第二階段:

Selenium2:合并了Selenium和webdriver, Webdriver是一套面向?qū)ο蟮腁PI。相比selenium1而言,Selenium WebDriver能夠進行更有效的功能測試的覆蓋,比如文件上傳、下載,彈出窗和對話框的問題,同時也克服了webdriverSelenium RC的單主機同源策略(同源策略是由Netscape提出的一個著名的安全策略。現(xiàn)在所有支持JavaScript 的瀏覽器都會使用這個策略。所謂同源是指,域名,協(xié)議,端口相同。

當(dāng)一個瀏覽器的兩個tab頁中分別打開來微博和淘寶的頁面,當(dāng)瀏覽器的微博tab頁執(zhí)行一個腳本的時候會檢查這個腳本是屬于哪個頁面的,即檢查是否同源,只有和微博同源的腳本才會被執(zhí)行。如果非同源,那么在請求數(shù)據(jù)時,瀏覽器會在控制臺中報一個異常,提示拒絕訪問。)的限制的問題。


第三個階段:

Selenium3:它是2016年10月份發(fā)布,現(xiàn)在默認安裝都是Selenium3了, Selenium3在 Selenium2 的基礎(chǔ)上做了一些調(diào)整,明顯區(qū)別在于Selenium2 對Firefox的支持最高只支持46及以下版本,selenium3支持47以上版本, 但需要下載 geckodriver.exe作為代理驅(qū)動。現(xiàn)在安裝的都是Selenium3。


Selenium安裝
Selenium安裝環(huán)境

  • 操作系統(tǒng):win8 64位
  • Firefox54.0.1(64位)
  • Python:3.5.4.
  • Selenium:Selenium3
  • Firefox驅(qū)動geckodrive
  • PyCharm:pycharm-community-2017.2.4.

安裝python

1、通過瀏覽器打開python官網(wǎng)下載,頁面打開后如下圖,點擊Windows:

Selenium介紹與環(huán)境配置

2、選擇點擊Python3.5.4 2017-8-8下面的Download Windows x86-64 executable installer,下載相應(yīng)版本的Python:

Selenium介紹與環(huán)境配置

3、下載完成后如下圖所示

Selenium介紹與環(huán)境配置

4、雙擊exe文件進行安裝,如下圖,勾選上Install launcher for all users(recommended)以及add python 3.6 to Path(切記要勾選打鉤的框),然后再點擊Customize installation進入到下一步:

Selenium介紹與環(huán)境配置

5、默認全選,點擊Next

Selenium介紹與環(huán)境配置

6、對于下圖中,可以通過Browse進行自定義安裝路徑,我選擇安裝在C盤Python35目錄下。然后點擊Install進行安裝,點擊install后便可以完成安裝了。

Selenium介紹與環(huán)境配置

7、檢查python是否安裝成功,在命令窗口中輸入python命令進行查詢,如顯示下圖中信息則表示成功了

Selenium介紹與環(huán)境配置

 

安裝selenium3


1、聯(lián)網(wǎng)狀態(tài)下進入cmd,在c: Python35Scripts下輸入命令: python –m pip install selenium 按回車。(如果將來卸載就輸入pip install -U selenium命令即可)

Selenium介紹與環(huán)境配置

2、安裝Firefox瀏覽器驅(qū)動geckodrive

下載解壓后將geckodriver.exe拷貝到Python的安裝目錄。 說明:selenium官方加上第三方宣布支持的驅(qū)動有很多種;除了PC端的瀏覽器之外,還支持iphone、android的driver。下面簡單說下selenium支持的各種driver的用途與說明:

1)Selenium可支持的PC瀏覽器驅(qū)動包括:

  • FF driver【包含在各自語言的客戶端里】
  • safari driver【包含在selenium server中】
  • IE driver
  • chrome driver 【第三方】
  • opera driver【第三方】
  • selenium可支持的偽瀏覽器驅(qū)動:
  • PhantomJS Driver【第三方】
  • HtmlUnit Driver【包含在selenium server中】

selenium可支持的移動端驅(qū)動:

  • Windows Phone driver 【第三方】
  • Selendroid -Selenium for Android【第三方】
  • ios-driver 【第三方】
  • Appium 支持iphone、ipad、android、FirefoxOS【第三方】

上述的所有驅(qū)動可以直接通過各自語言客戶端來調(diào)用,PC端的driver都是基于瀏覽器的,主要分為2種類型:
第一種是真實的瀏覽器driver:

比如:safari、ff都是以插件形式驅(qū)動瀏覽器本身的;ie、chrome都是通過二進制文件來驅(qū)動瀏覽器本身的;
這些driver都是直接啟動并通過調(diào)用瀏覽器的底層接口來驅(qū)動瀏覽器的,因此具有最真實的用戶場景模擬,主要用于進行web的兼容性測試使用。
第二種是偽瀏覽器driver:

selenium支持的偽瀏覽器包括htmlunit、PhantomJS;他們都不是真正的在瀏覽器、都沒有GUI,而是具有支持html、js等解析能力的類瀏覽器程序;這些程序不會渲染出網(wǎng)頁的顯示內(nèi)容,但是支持頁面元素的查找、JS的執(zhí)行等;由于不進行css及GUI渲染,所以運行效率上會比真實瀏覽器要快很多,主要用在功能性測試上面。
htmlunit是java實現(xiàn)的類瀏覽器程序,包含在selenium server中,無需驅(qū)動,直接實例化即可;其js的解析引擎是Rhino
PhantomJS是第三方的一個獨立類瀏覽器應(yīng)用,可以支持html、js、css等執(zhí)行;其驅(qū)動是Ghost driver在1.9.3版本之后已經(jīng)打包進了主程序中,因此只要下載一個主程序即可;其js的解析引擎是chrome 的V8。