软件自动化测试工具之智能元素定位
江湖一直有著這么一句名言“天下武功,唯快不破"。那么在軟件測試領域,自然而然我們會想到軟件自動化測試。軟件自動化測試的實現自然離不開軟件自動化測試工具。軟件自動化測試工具是軟件自動化的載體,只有通過工具,我們才能實現。武林也是一樣,成為武功蓋世,除了武林秘決之外,還要有依天劍、屠龍刀的配合。
話說軟件開發(fā)模式有:瀑布模型、增量式開發(fā)、螺旋開發(fā)、敏捷開發(fā)。軟件業(yè)早期的開發(fā)模式主要以瀑布模型為主,后期逐漸專為敏捷開發(fā)。軟件開發(fā)效率和變更頻率也隨著開發(fā)模式的變化而變化,優(yōu)其到了敏捷開發(fā)模式。一些傳統(tǒng)的自動化測試工具顯示力不從心,很難應付軟件開發(fā)的快速迭代和變更,導致一些公司開展自動化測試,徒勞無功。主要原因有:自動化用例建設速度慢,跟不上軟件新增內容;軟件變更頻繁導致用例維護成本巨大;學習成本高。所有這些都是自動化測試在中國軟件業(yè)難以建樹的主要原因。
軟件自動化測試工具工作流程:新建用例->調試用例->行執(zhí)行用例->分析結果->輸出報告->維護用例。其中:新建用例和維護用例是消耗最大的工作量。敏捷開發(fā)模式的引入,導致維護工量大大提升,甚至一度有超過新建用例工作量的趨勢,這一直困擾軟件自動化測試的一個頭痛問題。
自動化用例維護環(huán)節(jié)中,元素定位失效是一個主要原因。下面我們看一下一些常用自動化工具的元素定位原理:
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種定位方式中的一種對元素進行定位。現在現實的測試環(huán)境經常不是我們想象的那樣平靜。頁面中出現id,name,tag 重復的很多。也許在我們寫用例的不重復,經過一輪版本修改后很可能變得重復了。xpath是最不可能失效的,但是經常因父節(jié)點的修改而導致失效是常有的事。因此自動化設計人員疲于奔命的維護用例,工作量非常的巨大。
4、元素智能定位
kylinTOP的軟件,支持智能元素定位, 我比較感興趣就去研究了一下,該軟件的用例主要通過錄制生成,錄制生成一些可視化的腳本,如下所示:
上圖是點按鈕的步驟,步驟中記錄了按鈕的多個屬性:title|alt、src、border、alt、xpath以及它的孩子信息。有些屬性并不能唯一定位元素(頁面中存在重復),如:border。kylinTOP記錄下了按鈕元素的所有身份信息。當筆者嘗試修改頁面代碼中title|alt的值 ,使頁面中title|alt的值有重復。在腳本回放時,仍然可以正常運行。恢復title|alt值 ,重復上述修改步驟,逐個修改其它屬性值,仍然不影響腳本運行。通過測試發(fā)現,修改按鈕任何屬性都不影響腳本執(zhí)行。
通過閱讀官網資料,說元素定位是根據元素的一系列屬性進行定位,并不依賴于某一個屬性,采取的是一種元素智能定位算法。在軟件自動化測試領域,kylinTOP的元素定位的確有過人之處,大大提高了自動化用例執(zhí)行的穩(wěn)定性,節(jié)省了用例的維護成本。
總結
以上是生活随笔為你收集整理的软件自动化测试工具之智能元素定位的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LED指示灯的基本控制
- 下一篇: V-rep学习笔记:视觉传感器1