2014-12-05 69 views
2

我試圖在Android設備上運行一些葫蘆測試。如果我在運行測試之前手動關閉屏幕,那麼一切正常。在Nexus 4上,如果我關閉屏幕並嘗試運行測試,那麼我的第一種情況會超時等待元素出現。在Galaxy Nexus上,如果我在關閉屏幕的情況下開始測試,Calabash會喚醒設備並通過測試。設備屏幕睡眠時測試失敗

有沒有一些設備,葫蘆根本無法喚醒? Nexus 4是其中之一嗎?手動打開設備不可行,因爲我會在很多設備上頻繁運行這些測試。

我發現了一些過時的引用來解決這個問題。從2012年發佈的訊息亞當Niedzielski在https://groups.google.com/forum/#!topic/calabash-android/o6lUuEOuGtE表明在app_life_cycle_hooks.rb

include Calabash::Android::Operations 

AfterConfiguration do |config| 
    wake_up 
end 

下鉤,但代碼添加到ruby-gem/bin/calabash-android在葫蘆明確禁止列入Operations模塊:https://github.com/calabash/calabash-android/commit/995daef9b6636e7e4e572aeb5d4f90d6d072320f所以我想這已經不再是推薦的方法。如果我刪除包括,只是鍵入Calabash::Android::Operations.wake_up我得到一個NameError

回答

4

我碰到這個錯誤偶爾,最終屏幕超時設置爲超過一分鐘,在開始測試之前,運行此方法:

def self.turn_on_screen(device_serial_number) 
    # Switches on the android devices screen if it isn’t already on. 
    if `adb -s #{device_serial_number} shell dumpsys input_method | grep mScreenOn`.include? 'false' 
     `adb -s #{device_serial_number} shell input keyevent KEYCODE_POWER` 
    end 
    end 

這將打開模擬電源按鈕的按鍵如果屏幕尚未打開。我已經在大約4種不同的設備上使用過這個功能,迄今爲止沒有任何問題,所以希望它能適用於您。

可能值得注意的是,我也將鎖屏關閉了設備。

編輯:更新棒棒糖後,我不得不在另一個檢查中添加。使用這兩個似乎都在我的所有測試設備上做的伎倆。

if `adb shell dumpsys input_method | grep mInteractive`.include? 'false' 
    `adb shell input keyevent KEYCODE_POWER` 
end 
+0

不錯的解決方法!我沒有想過使用adb。我認爲這會做到這一點。謝謝! – aschmied 2014-12-09 17:57:08

+1

在銀河S3上,我不得不做'KEYBODE_POWER'而不是'KEYCODE_POWER' – 2015-03-19 21:03:12

+1

我在HTC M8上有一個相關的問題:在我的情況下,屏幕不會關閉,而是變暗,而是導致第一個觸摸測試中的事件會丟失(它只是不顯示屏幕,並且永遠不會到達應用程序)。在start_test_server_in_background幫助後將以下代碼添加到app_life_cycle_hooks.rb中: 'system(「#{default_device.adb_command} shell input keyevent KEYCODE_UNKNOWN」)' – dmitrych 2015-05-21 08:53:41

相關問題