全國大學生軟件測試大賽移動應用測試腳本編寫案例Demo

案例1——汽車之家

在eclipse裏使用對應的考試(或練習)祕鑰登錄並下載題目之後,打開項目的Main.java文件,接下來將在test函數裏編寫測試腳本。

下面我們將以汽車之家爲例,講解如何依據題目的測試需求來編寫一個能獲得高分的腳本。

測試需求中第一條測試需求如下:

 

首先要打開Uiautomator Viewer工具來獲取我們要測試的控件的定位參數,該工具的介紹和具體使用參考幫助文檔/腳本編寫要求

使用該工具獲取應用啓動的主頁面,如下圖

 

我們會發現,主頁面上有一個彈窗,而這並不在我們需要測試的範圍之內,所以我們要關

這個彈窗。在上圖工具中可以看到彈窗關閉按鈕沒有id

所以有下面這行代碼用於XPath定位按鈕並點擊關閉該彈窗

driver.findElementByXPath("//android.widget.TextView[@text='不再提醒']").click();

關閉彈窗之後再次用工具分析當前頁面,如下圖

 

可以看到我們測試範圍內(上圖用藍色框圈出的部分)的菜單欄的詳細控件信息,但通過

對比我們發現,“推薦”、“金融、“原創”等菜單欄控件的id都爲上圖中的

com.cubic.autohome:id/ah_common_text_badge

而根據控件定位參數的唯一性原則,可知我們此處不能使用id來定位控件,考慮使用xPath來定位,而根據上圖中的控件參數我們可以知道,“推薦”菜單欄控件對應的xPath應該爲

android.widget.TextView[@text='推薦']

所以我們應該用下面的語句來定位並點擊測試該控件

driver.findElementByXPath("//android.widget.TextView[@text='推薦']").click();

同理,“金融”、“原創”等菜單欄控件也用此類方法來定位並進行點擊測試。但在測試過程中發現該菜單欄還有其他滑動之後才能顯示的欄目,於是使用了Appium API中的一個Swipe方法實現了一個簡單的左滑方法如下:

public void swipeRight2Left(AppiumDriver driver){
        int startx = 510;
        int starty = 161;
        int endx = 30;
        int endy = 161;
        driver.swipe(startx, starty, endx, endy, 500);
}

其中滑動的起始和終止X、Y座標分別來自“視頻”和“推薦”控件的bounds屬性。如下

安卓佈局中每個控件都是一個矩形,bounds屬性中兩個座標分別是矩形左上角和右下角。

不過這種用座標的方式實現滑動的弊端在於換一個分辨率的設備腳本就可能執行失敗,更優雅的做法是獲得屏幕寬高後動態計算出滑動的座標,依賴以下兩個方法,具體實現不做贅述

driver.manage().window().getSize().width;
driver.manage().window().getSize().height;

接下來看到上圖底部我們需要測試的菜單欄,通過查看底部菜單欄控件信息,發現其id都是唯一的,比如“首頁”這個控件的id就爲

com.cubic.autohome:id/article_main_RadioButton

而“論壇”這個控件的id爲

com.cubic.autohome:id/club_main_RadioButton

其他的底部菜單欄控件id經過查看也各不相同,所以這裏我們可以使用id來定位這些控件。

於是對於底部菜單欄我們用如下語句進行點擊測試

driver.findElementById("com.cubic.autohome:id/article_main_RadioButton").click();
driver.findElementById("com.cubic.autohome:id/club_main_RadioButton").click();
driver.findElementById("com.cubic.autohome:id/car_main_RadioButton").click();
driver.findElementById("com.cubic.autohome:id/find_main_RadioButton").click();
driver.findElementById("com.cubic.autohome:id/owner_main_RadioButton").click();

接下來看到測試需求中的第二條要求如下:

 

所以查看主頁面上搜索框的控件信息,如下

這裏看到其id是com.autohome.main.article:id/search_box,我們看到需求中還說明要輸入“特斯拉”進行搜索,但是注意,上圖主頁面中的搜索框控件的class是android.widget.RelativeLayout,而可以輸入文字的搜索框的class應該是android.widget.EditText。

所以這裏不能直接對這個搜索框控件輸入文字,而要先點擊一下該控件進入真正的搜索頁面,如下圖

此時,可以看到這個頁面的搜索框纔是真正可以輸入內容的搜索框,在此輸入“特斯拉”並進行搜索。

上述兩個步驟的具體代碼如下

driver.findElementById("com.autohome.main.article:id/search_box").click();
driver.findElementById("com.autohome.plugin.search:id/fragment_search_keyword_autocompleteview").sendKeys("特斯拉");
driver.sendKeyEvent(AndroidKeyCode.ENTER);

至此一道試題的腳本編寫,就已基本完成,接下來啓動Appium Server並連接測試設備後,嘗試運行腳本,確保腳本能正常運行後使用插件進行運行打分並提交。

其中在運行過程中,依據不同的設備可能會出現不同的權限彈窗(如應用請求獲取位置信息等),這類測試過程中出現的問題,請在腳本中自行加入判斷處理。

完整示例代碼請參考Qiche.java

案例2——快圖瀏覽

案例1已詳細說明了移動應用自動化測試題的腳本編寫邏輯,案例2直接附上高分腳本PicFolder.java,參考案例2的測試需求,並嚴格按照腳本編寫要求即可快速掌握如何編寫滿足試題要求的高分腳本。

 

 

補充

由於腳本在調試測試過程中可能會執行失敗導致報錯,插件對於運行出錯的情況不會評分上傳,可以在腳本外加一個try catch 塊,但catch中不要打印stackTrace,這樣即使運行出錯插件也能對腳本已經測試過的範圍進行評分上傳。

發佈了160 篇原創文章 · 獲贊 179 · 訪問量 28萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章