最近在招聘,很多同學(xué)的簡(jiǎn)歷都有自動(dòng)化測(cè)試蝴乔,基本都有selenium记餐。但很少有人真正弄清selenium。一個(gè)是selenium的提供了很多組件薇正,讓人容易上手片酝,然后很多人就沒(méi)有然后了巩剖。二是selenium的更新伴隨著工具的合并,很多人壓根沒(méi)高清自己用的是selenium RC 還是 webdriver钠怯。根據(jù)最近面試的情況佳魔,把很多同學(xué)在實(shí)踐selenium的時(shí)候沒(méi)弄清的問(wèn)題總結(jié)了一下。詳述如下:
1 selenium 工具組件
1.1 selenium2晦炊,也稱(chēng)為selenium webdriver鞠鲜。webdriver原來(lái)是另一個(gè)自動(dòng)化測(cè)試工具,后與selenium 合并了断国。webdriver直接調(diào)用瀏覽器本身對(duì)自動(dòng)化支持的接口來(lái)驅(qū)動(dòng)瀏覽器的操作贤姆。故名思義,它將有不同的driver來(lái)驅(qū)動(dòng)不同系統(tǒng)上不同的瀏覽器稳衬。
1.2 selenium1霞捡,也稱(chēng)為seleniumRC或者Remote Control。就是selenium的原本項(xiàng)目薄疚。RC是在瀏覽器啟動(dòng)后碧信,使用js來(lái)驅(qū)動(dòng)瀏覽器的操作。為什么叫RC呢街夭?因?yàn)镽C的設(shè)計(jì)是可以支持控制遠(yuǎn)程服務(wù)器上的selenium server來(lái)操作遠(yuǎn)程端的瀏覽器砰碴。
1.3 seleniumIDE,這個(gè)是大家都明確的板丽,以插件的形式安裝在firefox呈枉,用于錄制。
1.4 selenium-grid埃碱,這個(gè)是對(duì)使用RC進(jìn)行測(cè)試時(shí)猖辫,需要執(zhí)行大量用例或分布式執(zhí)行的時(shí)候,提供的框架砚殿,就是建立多個(gè)服務(wù)器的hub與node的關(guān)系而已啃憎。
簡(jiǎn)單說(shuō),selenium項(xiàng)目原本的工具是IDE瓮具、RC荧飞、grid。而webdriver確實(shí)功能強(qiáng)大名党,“他們”討論討論叹阔,就把它被并入selenium了。
2 工具包
目前selenium的包已升級(jí)到3.x传睹,大概是16年下半年耳幢。常用的包如下:
2.1 Selenium Standalone Server 作為遠(yuǎn)程的服務(wù),運(yùn)行RC和webdriver。從3.x版本開(kāi)始睛藻,RC不能直接運(yùn)行启上,需要通過(guò)WebDriverBackedSelenium的接口。
2.2 selenium client & webdriver :編寫(xiě)RC店印、webdriver代碼需要的包冈在。主要支持:java、c#按摘、ruby包券、python、js炫贤。
2.3 google chrome driver:支持google chrome的driver溅固。有win、mac兰珍、linux版本侍郭。
2.4 htmlUnitDriver:不使用具體的瀏覽器,而是在內(nèi)存中運(yùn)行掠河。
2.5 Mozilla GeckoDriver:支持火狐瀏覽器的driver亮元。有win、mac口柳、linux版本
更多的包參考:http://www.seleniumhq.org/download/
3 選用工具
了解階段:IDE+firefox
入門(mén)階段:RC苹粟、webDriver+firefox
深入階段: webdriver+testNG+google chrome driver+一門(mén)編程語(yǔ)言
瀏覽器選用google chrome 主要是經(jīng)驗(yàn)主觀覺(jué)得selenium對(duì)firefox新版本的支持一直比較慢。而google chrome的較穩(wěn)定跃闹。
4 mac系統(tǒng)下google chrome瀏覽器的路徑配置
win系統(tǒng)的資料比較多,主要說(shuō)下mac系統(tǒng)的問(wèn)題毛好。
在創(chuàng)建driver時(shí)望艺,找不到瀏覽器路徑,通常使用設(shè)定系統(tǒng)屬性來(lái)實(shí)現(xiàn)肌访。
而在mac系統(tǒng)下找默,使用google chrome瀏覽器或firefox時(shí),先下載對(duì)應(yīng)的 driver吼驶。在代碼中配置driver的地址惩激,再創(chuàng)建driver,例如 :
System.setProperty("webdriver.chrome.driver","/Users/yp-tc-m-2933/Desktop/selejar/chromedriver");
WebDriverdriver=newChromeDriver();
親測(cè):firefox 51.0.1 (64 位)蟹演,mac 10.10.5风钻。創(chuàng)建firefox driver后直接崩潰。
5 元素定位與可測(cè)性
selenium提供了很豐富的元素定位工具酒请。但總是會(huì)有找不到或者變更頻繁的骡技,導(dǎo)致元素定位失敗。實(shí)際上,作為測(cè)試方布朦,在系統(tǒng)設(shè)計(jì)時(shí)囤萤,就應(yīng)該提出對(duì)頁(yè)面測(cè)試的需求,在頁(yè)面設(shè)計(jì)時(shí)是趴,在頁(yè)面元素中埋入測(cè)試屬性值涛舍。這就降低了頁(yè)面自動(dòng)化的難度,不用把時(shí)間花在復(fù)雜的定位元素的過(guò)程中唆途,并且最重要的是避免一旦頁(yè)面修改做盅,帶來(lái)的腳本維護(hù)工作。這就提高了系統(tǒng)可測(cè)性窘哈。
6 后續(xù)
隨著對(duì)測(cè)試開(kāi)發(fā)的逐漸流行吹榴,測(cè)試人員的代碼能力也在提升。在selenium的學(xué)習(xí)中滚婉,更需要掌握webdriver的api图筹,探索selenium的更多特性。