最近在招聘,很多同學的簡歷都有自動化測試,基本都有selenium。但很少有人真正弄清selenium。一個是selenium的提供了很多組件,讓人容易上手,然后很多人就沒有然后了。二是selenium的更新伴隨著工具的合并,很多人壓根沒高清自己用的是selenium RC 還是 webdriver。根據(jù)最近面試的情況,把很多同學在實踐selenium的時候沒弄清的問題總結(jié)了一下。詳述如下:
1 selenium 工具組件
1.1 selenium2,也稱為selenium webdriver。webdriver原來是另一個自動化測試工具,后與selenium 合并了。webdriver直接調(diào)用瀏覽器本身對自動化支持的接口來驅(qū)動瀏覽器的操作。故名思義,它將有不同的driver來驅(qū)動不同系統(tǒng)上不同的瀏覽器。
1.2 selenium1,也稱為seleniumRC或者Remote Control。就是selenium的原本項目。RC是在瀏覽器啟動后,使用js來驅(qū)動瀏覽器的操作。為什么叫RC呢?因為RC的設(shè)計是可以支持控制遠程服務(wù)器上的selenium server來操作遠程端的瀏覽器。
1.3 seleniumIDE,這個是大家都明確的,以插件的形式安裝在firefox,用于錄制。
1.4 selenium-grid,這個是對使用RC進行測試時,需要執(zhí)行大量用例或分布式執(zhí)行的時候,提供的框架,就是建立多個服務(wù)器的hub與node的關(guān)系而已。
簡單說,selenium項目原本的工具是IDE、RC、grid。而webdriver確實功能強大,“他們”討論討論,就把它被并入selenium了。
2 工具包
目前selenium的包已升級到3.x,大概是16年下半年。常用的包如下:
2.1 Selenium Standalone Server 作為遠程的服務(wù),運行RC和webdriver。從3.x版本開始,RC不能直接運行,需要通過WebDriverBackedSelenium的接口。
2.2 selenium client & webdriver :編寫RC、webdriver代碼需要的包。主要支持:java、c#、ruby、python、js。
2.3 google chrome driver:支持google chrome的driver。有win、mac、linux版本。
2.4 htmlUnitDriver:不使用具體的瀏覽器,而是在內(nèi)存中運行。
2.5 Mozilla GeckoDriver:支持火狐瀏覽器的driver。有win、mac、linux版本
更多的包參考:http://www.seleniumhq.org/download/
3 選用工具
了解階段:IDE+firefox
入門階段:RC、webDriver+firefox
深入階段: webdriver+testNG+google chrome driver+一門編程語言
瀏覽器選用google chrome 主要是經(jīng)驗主觀覺得selenium對firefox新版本的支持一直比較慢。而google chrome的較穩(wěn)定。
4 mac系統(tǒng)下google chrome瀏覽器的路徑配置
win系統(tǒng)的資料比較多,主要說下mac系統(tǒng)的問題。
在創(chuàng)建driver時,找不到瀏覽器路徑,通常使用設(shè)定系統(tǒng)屬性來實現(xiàn)。
而在mac系統(tǒng)下,使用google chrome瀏覽器或firefox時,先下載對應(yīng)的 driver。在代碼中配置driver的地址,再創(chuàng)建driver,例如 :
System.setProperty("webdriver.chrome.driver","/Users/yp-tc-m-2933/Desktop/selejar/chromedriver");
WebDriverdriver=newChromeDriver();
親測:firefox 51.0.1 (64 位),mac 10.10.5。創(chuàng)建firefox driver后直接崩潰。
5 元素定位與可測性
selenium提供了很豐富的元素定位工具。但總是會有找不到或者變更頻繁的,導致元素定位失敗。實際上,作為測試方,在系統(tǒng)設(shè)計時,就應(yīng)該提出對頁面測試的需求,在頁面設(shè)計時,在頁面元素中埋入測試屬性值。這就降低了頁面自動化的難度,不用把時間花在復雜的定位元素的過程中,并且最重要的是避免一旦頁面修改,帶來的腳本維護工作。這就提高了系統(tǒng)可測性。
6 后續(xù)
隨著對測試開發(fā)的逐漸流行,測試人員的代碼能力也在提升。在selenium的學習中,更需要掌握webdriver的api,探索selenium的更多特性。