技術(shù)背景
在Web應(yīng)用中,用戶通過(guò)鍵盤在輸入框中輸入值和鼠標(biāo)點(diǎn)擊按鈕,鏈接等。比如在用戶名輸入框和密碼輸入框輸入正確的用戶名和密碼,然后點(diǎn)擊登錄按鈕進(jìn)行登錄。在Selenium自動(dòng)化中,Selenium提供多種API來(lái)對(duì)HTML元素進(jìn)行操作,對(duì)于每個(gè)HTML元素,需要一個(gè)可以標(biāo)識(shí)它的標(biāo)識(shí)符,在Selenium中稱之為定位器,Selenium支持多種不同類型的定位器,有標(biāo)識(shí)符,Id,Name, DOM Locator,XPath Locator, 以及CSS Locator等。本文主要討論DOM, XPATH,以及CSS定位器在不同的瀏覽器中的使用的優(yōu)缺點(diǎn)以及注意事項(xiàng)。
問(wèn)題與挑戰(zhàn)
針對(duì)一個(gè)使用Selenium RC的Web自動(dòng)化項(xiàng)目,在項(xiàng)目初期在Firefox上采用了比較靈活,簡(jiǎn)潔的XPath定位器來(lái)對(duì)應(yīng)用中的對(duì)象進(jìn)行操作。但在項(xiàng)目開(kāi)展到1/3時(shí),增加了對(duì)IE瀏覽器支持的需求。在使用現(xiàn)有基于XPath的腳本運(yùn)行后,發(fā)現(xiàn)腳本運(yùn)行時(shí)間呈現(xiàn)幾十上百倍地增加,在Firefox上執(zhí)行花費(fèi)1分鐘的腳本在IE上會(huì)花費(fèi)10~20分鐘,甚至更長(zhǎng)的時(shí)間。該問(wèn)題就導(dǎo)致了在IE上直接運(yùn)行之前已完成腳本變得不可行。要了解到Firefox支持原生的Xpath解析功能,而IE不支持原生的Xpath解析,而是基于一個(gè)外部的javascript library(Google's library)來(lái)進(jìn)行Xpath解析。由于需求是要求腳本能夠同時(shí)支持Firefox和IE瀏覽器,所以需要尋求另外一種方式來(lái)使得在不同瀏覽器上調(diào)用Selenium API所執(zhí)行時(shí)間相當(dāng)。
解決方案
在Selenium RC 0.9.2中,用以解析XPath的javascript庫(kù)在IE上執(zhí)行的時(shí)間增加了腳本執(zhí)行時(shí)間,而且在越復(fù)雜的頁(yè)面中,在IE上調(diào)用API所占用的時(shí)間越長(zhǎng)。于是決定換用其它類型的定位器,由于該被測(cè)Web應(yīng)用中大多數(shù)HTML元素未指定有ID和Name屬性,所以在這里首先采用比較靈活的Dom定位器進(jìn)行測(cè)試。
使用Dom定位器來(lái)對(duì)HTML元素定位,該Locator表達(dá)式需要以“dom=” 或者是“document.”開(kāi)頭的形式,Selenium會(huì)執(zhí)行這段javascript片斷來(lái)最終地取得我們需要訪問(wèn)的HTML元素,由此在Dom定位器中,可以使用Web頁(yè)面中的DOM對(duì)象來(lái)獲取文檔內(nèi)的所有HTML元素。 需要注意一點(diǎn)的是,Selenium執(zhí)行這段javascript片斷的時(shí)候,是采用整段javascript腳本執(zhí)行的值,也即是在這段javascript片斷中最后一個(gè)表達(dá)式的值。
使用Dom定位器后,在IE上腳本執(zhí)行的時(shí)間比使用Xpath的時(shí)候短很多,基本上跟在Firefox上面所花費(fèi)的時(shí)候基本相當(dāng)。
請(qǐng)參照以下的一個(gè)性能對(duì)照表:
依照以上表格,不難發(fā)現(xiàn),使用XPath定位器,能使得定位器比較簡(jiǎn)單,而對(duì)于比較復(fù)雜的對(duì)象(無(wú)IE和Name的動(dòng)態(tài)對(duì)象)在使用Dom定位器則非常的復(fù)雜。由于XPath在IE下的效率極其低下,也只能使用Dom定位器來(lái)支持IE瀏覽器。
在Selenium RC1.0.1版本發(fā)布后,Selenium增加了一個(gè)新的Xpath的javascript庫(kù):Cybozu Labs' faster library。
由以上表格可見(jiàn),在IE下使用了Cybozu Lab的XPath library后,執(zhí)行效率有了很大提升,基本上可以與使用Dom定位器相當(dāng)。通過(guò)比較,在新的項(xiàng)目中使用Selenium來(lái)進(jìn)行Web自動(dòng)化開(kāi)發(fā),使用XPath定位器,可以使得定位器本生比較簡(jiǎn)潔,而且也得到較高執(zhí)行效率。
在Web開(kāi)發(fā)中,有較多的人使用CSS來(lái)優(yōu)化Web頁(yè)面效果。而Selenium也支持CSS定位器,在IE和Firefox瀏覽器下,使用CSS定位器時(shí),執(zhí)行的效率與XPath基本相當(dāng),而且CSS定位器同樣與XPath比較簡(jiǎn)潔。所以對(duì)CSS比較熟悉的開(kāi)發(fā)人員也可以使用CSS定位器來(lái)進(jìn)行SeleniumWeb自動(dòng)化開(kāi)發(fā)。
終上所述,在新的Web自動(dòng)化項(xiàng)目中推薦使用XPATH和CSS定位器,請(qǐng)參考下面的對(duì)照表格。
環(huán)境設(shè)置描述
在需要運(yùn)行Web瀏覽器的主機(jī)上運(yùn)行Selenium RC服務(wù),記主機(jī)1。
Web自動(dòng)化程序可以運(yùn)行在主機(jī)1上,也可以運(yùn)行在任何一臺(tái)可與主機(jī)1進(jìn)行網(wǎng)絡(luò)通信的其它主機(jī)上,
使用工具簡(jiǎn)介
Selenium RC服務(wù)程序,需要使用JDK/JRE來(lái)運(yùn)行Selenium RC服務(wù)。
支持HTTP請(qǐng)求的程序語(yǔ)言,Perl, Ruby, Python, Java, C#等等。
支持所有Javascript-based瀏覽器。
聯(lián)系客服