江湖一直有著這么一句名言“?天下武功,唯快不破?"。那么在軟件測試領(lǐng)域,自然而然我們會想到軟件自動化測試。軟件自動化測試的實現(xiàn)自然離不開軟件自動化測試工具。軟件自動化測試工具是軟件自動化的載體,只有通過工具,我們才能實現(xiàn)。武林也是一樣,成為武功蓋世,除了武林秘決之外,還要有依天劍、屠龍刀的配合。
話說軟件開發(fā)模式有:瀑布模型、增量式開發(fā)、螺旋開發(fā)、敏捷開發(fā)。軟件業(yè)早期的開發(fā)模式主要以瀑布模型為主,后期逐漸專為敏捷開發(fā)。軟件開發(fā)效率和變更頻率也隨著開發(fā)模式的變化而變化,優(yōu)其到了敏捷開發(fā)模式。一些傳統(tǒng)的自動化測試工具顯示力不從心,很難應(yīng)付軟件開發(fā)的快速迭代和變更,導致一些公司開展自動化測試,徒勞無功。主要原因有:自動化用例建設(shè)速度慢,跟不上軟件新增內(nèi)容;軟件變更頻繁導致用例維護成本巨大;學習成本高。所有這些都是自動化測試在中國軟件業(yè)難以建樹的主要原因。
軟件自動化測試工具工作流程:新建用例->調(diào)試用例->行執(zhí)行用例->分析結(jié)果->輸出報告->維護用例。其中:新建用例和維護用例是消耗最大的工作量。敏捷開發(fā)模式的引入,導致維護工量大大提升,甚至一度有超過新建用例工作量的趨勢,這一直困擾軟件自動化測試的一個頭痛問題。
自動化用例維護環(huán)節(jié)中,元素定位失效是一個主要原因。下面我們看一下一些常用自動化工具的元素定位原理:
1、selenium元素定位樣例
?以下是一段Python+ selenium的用例樣例,對元素的操作是以元素id為基礎(chǔ)的
```
fromseleniumimportwebdriver 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").ClickDialog("Login_2").Dialog("FlightReservations").Static("The password is 'MERCURY'").CheckCheckPoint("The password is 'MERCURY'")Dialog("Login_2").Dialog("FlightReservations").WinButton("確定").ClickDialog("Login").WinButton("OK").ClickWindow("FlightReservation").ActivateWindow("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
在現(xiàn)有的自動化軟件當中,都是以上述8種定位方式中的一種對元素進行定位?,F(xiàn)在現(xiàn)實的測試環(huán)境經(jīng)常不是我們想象的那樣平靜。頁面中出現(xiàn)id,name,tag 重復的很多。也許在我們寫用例的不重復,經(jīng)過一輪版本修改后很可能變得重復了。xpath是最不可能失效的,但是經(jīng)常因父節(jié)點的修改而導致失效是常有的事。因此自動化設(shè)計人員疲于奔命的維護用例,工作量非常的巨大。
4、元素智能定位
kylinTOP的軟件,支持智能元素定位, 我比較感興趣就去研究了一下,該軟件的用例主要通過錄制生成,錄制生成一些可視化的腳本,如下所示:


上圖是點按鈕的步驟,步驟中記錄了按鈕的多個屬性:title|alt、src、border、alt、xpath以及它的孩子信息。有些屬性并不能唯一定位元素(頁面中存在重復),如:border。?kylinTOP?記錄下了按鈕元素的所有身份信息。當筆者嘗試修改頁面代碼中title|alt的值 ,使頁面中title|alt的值有重復。在腳本回放時,仍然可以正常運行。恢復title|alt值 ,重復上述修改步驟,逐個修改其它屬性值,仍然不影響腳本運行。通過測試發(fā)現(xiàn),修改按鈕任何屬性都不影響腳本執(zhí)行。
通過閱讀官網(wǎng)資料,說元素定位是根據(jù)元素的一系列屬性進行定位,并不依賴于某一個屬性,采取的是一種元素智能定位算法。在軟件自動化測試領(lǐng)域,kylinTOP的元素定位的確有過人之處,大大提高了自動化用例執(zhí)行的穩(wěn)定性,節(jié)省了用例的維護成本。
有人喜歡創(chuàng)造世界,他們做了開發(fā)者;有的人喜歡開發(fā)者,他們做了測試員。什么是軟件測試?軟件測試就是一場本該在用戶面前發(fā)生的災(zāi)難提前在自己面前發(fā)生了,這會讓他們生出一種救世主的感覺,拯救了用戶,也就拯救者這個軟件,避免了他們被卸載的命運。
微信搜一搜【程序員一凡】關(guān)注這個文縐縐的程序員,關(guān)注后回復【面試】有我準備的一線大廠面試資料和簡歷模板,希望大家都能找到心儀的工作,學習是一條時而郁郁寡歡,時而開懷大笑的路,加油。如果你通過努力成功進入到了心儀的公司,一定不要懈怠放松,職場成長和新技術(shù)學習一樣,不進則退。如果有幸我們江湖再見!