軟體WEB自動化測試工具之智慧元素定位

  • 2020 年 3 月 14 日
  • 筆記

 江湖一直有著這麼一句名言“天下武功,唯快不破“。那麼在軟體測試領域,自然而然我們會想到軟體自動化測試。軟體自動化測試的實現自然離不開軟體自動化測試工具。軟體自動化測試工具是軟體自動化的載體,只有通過工具,我們才能實現。武林也是一樣,成為武功蓋世,除了武林秘決之外,還要有依天劍、屠龍刀的配合。

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

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

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

1、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()  

 2、robotFramwork+seleniuLibrary元素定位樣例

3、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種:

  1、id定位: driver.find_element_by_id(“kw”)

 2、name定位: driver.find_element_by_name(“wd”)

 3、class定位: driver.find_element_by_class_name(“s_ipt”)

 4、tag定位:driver.find_element_by_tag_name(“input”)

 5、link定位:driver.find_element_by_link_text(“新聞”)

 6、partial_link定位:driver.find_element_by_partial_link_text()

 7、xpath定位: driver.find_element_by_xpath(“/html/body/div[2]/div/form/div/input”)

 8、CSS定位:driver.find_element_by_css_selector

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

4、元素智慧定位

 kylinTOP的軟體,支援智慧元素定位, 我比較感興趣就去研究了一下,該軟體的用例主要通過錄製生成,錄製生成一些可視化的腳本,如下所示:

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

   通過閱讀官網資料,說元素定位是根據元素的一系列屬性進行定位,並不依賴於某一個屬性,採取的是一種元素智慧定位演算法。在軟體自動化測試領域,kylinTOP的元素定位的確有過人之處,大大提高了自動化用例執行的穩定性,節省了用例的維護成本。官網:www.70testing.com