加速IE瀏覽器自動化執行效率:Selenium自動化中DOM,XPATH,CSS定位Web頁面對象的優劣性分析
1.技術背景 在Web應用中,用戶通過鍵盤在輸入框中輸入值和鼠標點擊按鈕,鏈接等。比如在用戶名輸入框和密碼輸入框輸入正確的用戶名和密碼,然后點擊登錄按鈕進行登錄。在Selenium自動化中,Selenium提供多種API來對HTML元素進行操作,對於每個HTML元素,需要一個可以標識它的標識符,在Selenium中稱之為定位器,Selenium支持多種不同類型的定位器,有標識符,Id,Name, DOM Locator,XPath Locator, 以及CSS Locator等。本文主要討論DOM, XPATH,以及CSS定位器在不同的瀏覽器中的使用的優缺點以及注意事項。
2.問題與挑戰 針對一個使用Selenium RC的Web自動化項目,在項目初期在Firefox上采用了比較靈活,簡潔的XPath定位器來對應用中的對象進行操作。但在項目開展到1/3時,增加了對IE瀏覽器支持的需求。在使用現有基於XPath的腳本運行后,發現腳本運行時間呈現幾十上百倍地增加,在Firefox上執行花費1分鍾的腳本在IE上會花費10~20分鍾,甚至更長的時間。該問題就導致了在IE上直接運行之前已完成腳本變得不可行。要了解到Firefox支持原生的Xpath解析功能,而IE不支持原生的Xpath解析,而是基於一個外部的javascript library(Google's library)來進行Xpath解析。由於需求是要求腳本能夠同時支持Firefox和IE瀏覽器,所以需要尋求另外一種方式來使得在不同瀏覽器上調用Selenium API所執行時間相當。
3.解決方案 在Selenium RC 0.9.2中,用以解析XPath的javascript庫在IE上執行的時間增加了腳本執行時間,而且在越復雜的頁面中,在IE上調用API所占用的時間越長。於是決定換用其它類型的定位器,由於該被測Web應用中大多數HTML元素未指定有ID和Name屬性,所以在這里首先采用比較靈活的Dom定位器進行測試。
使用Dom定位器來對HTML元素定位,該Locator表達式需要以“dom=” 或者是“document.”開頭的形式,Selenium會執行這段javascript片斷來最終地取得我們需要訪問的HTML元素,由此在Dom定位器中,可以使用Web頁面中的DOM對象來獲取文檔內的所有HTML元素。 需要注意一點的是,Selenium執行這段javascript片斷的時候,是采用整段javascript腳本執行的值,也即是在這段javascript片斷中最后一個表達式的值。
使用Dom定位器后,在IE上腳本執行的時間比使用Xpath的時候短很多,基本上跟在Firefox上面所花費的時候基本相當。