monkeyrunner之測試結果判斷(八)


monkeyrunner的功能腳本編寫完成之后,我們就需要對結果進行判斷,判斷結果是否為我們預期的結果值。下面我們主要講述2種方式判斷結果。

方式一、monkeyrunner截圖對比

這是monkeyrunner非常有特色的一種方式,用於通過設備屏幕前后的對比來獲取對執行結果的判斷。使用.sameAs()對比截圖,獲得測試結果。

#連接設備
device = MonkeyRunner.waitForConnection()
#當前頁面截圖
image = device.takeSnapshot()
#去文件中找到我們要對比的正確的圖片(這里比如存儲在F盤,命名為result.png),與該截圖image進行對比
result = MonkeyRunner.loadImageFromFile('F:\\result.png')
#判斷圖片相識度是否是90%(這個比值根據需求來定)
if image.sameAs(result,0.9):
    print "圖片對比成功"
else:
    print "圖片對比失敗"

這種方式雖然比較常見,但是如果屏幕分辨率一旦改變,就使得對比結果無效,代碼可移植性很低,不穩定。

下面推薦一種通過控件id或文字判斷結果的方式。

方式二、monkeyrunner文字對比

1.EasyMonkeyDevice

這種文字對比方式,主要是利用EasyMonkeyDevice中的exists(By selector)和getText(By selector)兩種方法來判斷。關於EasyMonkeyDevice,后續有文章會專門介紹其所有的API。

核心代碼如下(代碼中的packageName和activity要換成自己需要的包名和活動名):

#coding:utf-8
from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice,MonkeyImage
#提供了根據ID進行訪問
from com.android.monkeyrunner.easy import EasyMonkeyDevice
#根據ID返回PyObject的方法
from com.android.monkeyrunner.easy import By
#連接設備
device = MonkeyRunner.waitForConnection()
#packageName、activity根據自己的需求獲取,啟動app
componentName = packageName + '/' + activity
device.startActivity(component = componentName)
#必須在activity啟動之后
easy_device = EasyMonkeyDevice(device)   
#判斷結果頁面中是否有特定控件ID:如果有,則獲取該控件上的文本;若沒有,則直接出對比結果 
if easy_device.exists(By.id('id/btn_loginout')) == True:
    text = easy_device.getText(By.id('id/btn_loginout'))
    if text.encode('utf-8') == '注銷':
        print "login success"
    else:
        print "login failed"
else:
    print "login failed"

注:控件text需要具有唯一性。

2.HierarchyViewer

這個方法的API和EasyMonkeyDevice類似,主要用到findViewById和getText來判斷。關於HierarchyViewer各API,后續有文章介紹。

由於方法和EasyMonkeyDevice類似,這里不再贅述。核心代碼如下:

device=MonkeyRunner.waitForConnection()
hierarchy_viewer = device.getHierarchyViewer()
login_button = hierarchy_viewer.findViewById('id/btn_loginout')
text =  hierarchy_viewer.getText(login_button)
print text.encode('utf-8')

最后,再補充一句,還可以根據EasyMonkeyDevice的getFocusedWindowId接口來獲取當前頁面的窗口ID,即activity,或者,根據HierarchyViewer的getFocusedWindowName來獲取當前頁面的packageName/activityName。從而方便monkeyrunner腳本中各頁面的切換。

注:每個窗口的activity並不是唯一的,所以當activity相同時,需要activity的Fragment來判斷當前頁面。(判斷方法后續講述,主要用sdk/tools/uiautomatorviewer)

核心代碼如下,歡迎拍磚:

#獲取當前頁面窗口ID
winId = easy_device.getFocusedWindowId() print winId.encode('utf-8')


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM