2014-03-24 72 views
1

我有一個Android應用程序,我想自動化/壓力測試。 我在SCAR Divi 中製作了基於圖像的自動化腳本,並針對安裝在Bluestack上的應用運行它。 我想把它改成Genymotion,因爲Bluestacks太慢了。Android的monkeyrunner - 檢查屏幕是否包含圖像或特定顏色

我已經有環境設置 (genymotion +圖像與我的應用程序+ adb安裝和工作)。 我在python中重寫了我的腳本並在MonkeyRunner中使用它,但是...

除了發送手勢,點擊和等待, 我缺少圖像識別功能。 我發現我可以用ImageMagic比較2個屏幕截圖,但那不是我所需要的。

我需要檢查某個按鈕,或至少是否在屏幕上顯示特定顏色。 任何人都可以指出我正確的方向嗎?

我會的一些例子:(

回答

5

MonkeyRunner確實提供相當不錯的基於圖像的測試方法。下面我將向您展示如何從設備當前顯示的屏幕上拍攝子圖像。然後,你可以保存這個子圖像和/或與參考圖像

首先比較你需要把你的設備的當前屏幕截圖

# Take a screenshot 
image = device.takeSnapshot() 

,那麼你可以採取分圖片。例如,該子圖像可以是某個屏幕上的按鈕,以驗證該屏幕上是否存在該按鈕。爲了能夠做到這一點,你可以使用下面的方法。下面的元組(0,0,50,100)只是一個例子。你應該提供你自己的。基本上它是(x,y,w,h)所需的子圖像。

# Take the sub-image 
sub_image = image.getSubImage((0, 0, 50, 100)) 

該步驟之後,您可以保存圖像和/或與參考圖像比較。要與參考圖像進行比較,您可以按如下所示進行比較:

# Load the reference image for comparison 
reference = MonkeyImage.loadFromFile(PATH_TO_REFERENCE_IMAGE) 

if not sub_image.sameAs(reference, 0.9): 
     print "Images do not match!" 
     # do something 

0.9是驗收等級。如果兩張圖片匹配達到90%或以上,則會被視爲已通過

希望這有助於您。如果遇到任何問題,請告訴我!

+0

你好gbudan。非常感謝您的答覆。這很好,但前提是您要檢查指定座標的特定正方形是否與參考圖像相同。我一定會用它來檢查靜態元素(比如按鈕)。但是,我還需要檢查某個位圖(或至少某種顏色)是否爲該屏幕截圖的一部分,並且可以將其放置在任何位置。 – user2192002

+0

Ok @ user2192002,在這種情況下,您可以使用'getRawPixelInt(x,y)'方法。假設您正在尋找可以在屏幕上任何位置的**黃色**顏色線。爲了簡化,假設這條線是水平的,其寬度與屏幕寬度相同。所以,你可以做的是,首先做一個截圖,然後從這個截圖一次一個像素地從屏幕的頂部一直到底部的一個while循環。當'getRawPixelInt(x,y)'方法找到一個黃色像素時,這意味着你已經找到了該行的位置。您也可以爲其他情況實施相同的邏輯。 – gbudan

+0

非常感謝您的回覆gbudan。我會在星期一嘗試實施和測試! – user2192002

0

AndroidViewClient可以獲取整個屏幕或特定視圖的截圖真的很感激。這些屏幕快照通常寫入使用文件

View.writeImageToFile(self, filename, format="PNG") 

但是,如果你有興趣在獲取原始圖像的對象,這是一個PIL Image(見http://www.pythonware.com/products/pil/),你可以做

image = device.takeSnapshot() 

,然後根據您的需要使用庫中的可用methods and tools對其進行操作或分析。

+0

因此...在僞代碼中... 1.將圖像保存到文件2.使用im.getcolors(maxcolors)獲取圖像3中所有顏色的列表。遍歷列表來查找特定的顏色。這是一種解決方法,我敢打賭它會很慢。我仍在尋找一種方法來檢查某個較大的圖像是否由較小的預定義圖像組成(如按鈕)。 – user2192002

+0

正如我所提到的,您不必保存文件,因爲您可以獲取「Image」對象,並且可以爲單個「View」(即「Button」)獲取該「Image」。 –

相關問題