軟件自動化測試工具之元素智能定位

 江湖一直有着這麼一句名言「天下武功,惟快不破"。那麼在軟件測試領域,天然而然咱們會想到軟件自動化測試。軟件自動化測試的實現天然離不開軟件自動化測試工具。軟件自動化測試工具是軟件自動化的載體,只有經過工具,咱們才能實現。武林也是同樣,成爲武功蓋世,除了武林祕決以外,還要有依天劍、屠龍刀的配合。css

    話說軟件開發模式有:瀑布模型、增量式開發、螺旋開發、敏捷開發。軟件業早期的開發模式主要以瀑布模型爲主,後期逐漸專爲敏捷開發。軟件開發效率和變動頻率也隨着開發模式的變化而變化,優其到了敏捷開發模式。一些傳統的自動化測試工具顯示力不從心,很難應付軟件開發的快速迭代和變動,致使一些公司開展自動化測試,徒勞無功。主要緣由有:自動化用例建設速度慢,跟不上軟件新增內容;軟件變動頻繁致使用例維護成本巨大;學習成本高。全部這些都是自動化測試在中國軟件業難以建樹的主要緣由。html

     軟件自動化測試工具工做流程:新建用例->調試用例->行執行用例->分析結果->輸出報告->維護用例。其中:新建用例和維護用例是消耗最大的工做量。敏捷開發模式的引入,致使維護工量大大提高,甚至一度有超過新建用例工做量的趨勢,這一直困擾軟件自動化測試的一個頭痛問題。python

    自動化用例維護環節中,元素定位失效是一個主要緣由。下面咱們看一下一些經常使用自動化工具的元素定位原理:web

一、selenium元素定位樣例算法

 如下是一段Python+ selenium的用例樣例,對元素的操做是以元素id爲基礎的瀏覽器

 from selenium import webdriver
 url = "http://10.98.110.44/egov-portal/egov/shIndex.html"
 # 打開瀏覽器,最大化瀏覽器
 driver = webdriver.Chrome()
 driver.get( url )
 driver.implicitly_wait( 10 )
 driver.maximize_window()
 #輸入帳號
 driver.find_element_by_id("username").send_keys(「zhangsan")
 #輸入密碼
 driver.find_element_by_id("password").send_keys("ww1234")
 #點擊登陸按鈕
 driver.find_element_by_id("submitButton").click()

 二、robotFramwork+seleniuLibrary元素定位樣例工具

三、UFT工具元素定位方法樣例學習

Dialog("Login").WinEdit("AgentName:").Set "mercury"
Dialog("Login_2").WinButton("Help").Click
Dialog("Login_2").Dialog("FlightReservations").Static("The password is 'MERCURY'").CheckCheckPoint("The password is 'MERCURY'")
Dialog("Login_2").Dialog("FlightReservations").WinButton("肯定").Click
Dialog("Login").WinButton("OK").Click
Window("FlightReservation").Activate
Window("FlightReservation").ActiveX("MaskEdBox").Type "102715"
#選擇日期
Window("Flight Reservation").WinComboBox("FlyFrom:").Select "Frankfurt"

 從以上信息我看到,元素的定位都是經過元素的屬性定位,元素屬性主要有如下8種:測試

  一、id定位: driver.find_element_by_id("kw")url

 二、name定位: driver.find_element_by_name("wd")

 三、class定位: driver.find_element_by_class_name("s_ipt")

 四、tag定位:driver.find_element_by_tag_name("input")

 五、link定位:driver.find_element_by_link_text("新聞")

 六、partial_link定位:driver.find_element_by_partial_link_text()

 七、xpath定位: driver.find_element_by_xpath("/html/body/div[2]/div/form/div/input")

 八、CSS定位:driver.find_element_by_css_selector

在現有的自動化軟件當中,都是以上述8種定位方式中的一種對元素進行定位。如今現實的測試環境常常不是咱們想象的那樣平靜。頁面中出現id,name,tag 重複的不少。也許在咱們寫用例的不重複,通過一輪版本修改後極可能變得重複了。xpath是最不可能失效的,可是常常因父節點的修改而致使失效是常有的事。所以自動化設計人員疲於奔命的維護用例,工做量很是的巨大。

 2008年市場上出現一款kylinTOP的軟件,支持智能元素定位, 我比較感興趣就去研究了一下,該軟件的用例主要經過錄制生成,錄製生成一些可視化的腳本,以下所示:

 上圖是點按鈕的步驟,步驟中記錄了按鈕的多個屬性:title|alt、src、border、alt、xpath以及它的孩子信息。有些屬性並不能惟必定位元素(頁面中存在重複),如:border。kylinTOP記錄下了按鈕元素的全部身份信息。當筆者嘗試修改頁面代碼中title|alt的值 ,使頁面中title|alt的值有重複。在腳本回放時,仍然能夠正常運行。恢復title|alt值 ,重複上述修改步驟,逐個修改其它屬性值,仍然不影響腳本運行。經過測試發現,修改按鈕任何屬性都不影響腳本執行。

   經過閱讀官網資料,說元素定位是根據元素的一系列屬性進行定位,並不依賴於某一個屬性,採起的是一種元素智能定位算法。在軟件自動化測試領域,kylinTOP的元素定位的確有過人之處,大大提升了自動化用例執行的穩定性,節省了用例的維護成本。

相關文章
相關標籤/搜索