设备屏幕休眠时测试失败

时间:2014-12-05 18:26:45

标签: android adb calabash calabash-android

我正在尝试在Android设备上运行一些Calabash测试。如果我在运行测试之前手动转动屏幕,那么一切正常。在Nexus 4上,如果我关闭屏幕并尝试运行测试,那么我的第一个场景会超时等待元素出现。在Galaxy Nexus上,如果我在关闭屏幕的情况下开始测试,那么Calabash会唤醒设备并通过测试。

Calabash是否有些设备根本无法唤醒? Nexus 4是其中之一吗?手动打开设备是不可行的,因为我会经常在许多设备上运行这些测试。

我发现了一些过时的对这个问题的引用。 Adam Niedzielski在2012年https://groups.google.com/forum/#!topic/calabash-android/o6lUuEOuGtE发表的一篇文章提出了app_life_cycle_hooks.rb

中的以下内容
include Calabash::Android::Operations

AfterConfiguration do |config|
  wake_up
end

但是代码已添加到Calabash中的ruby-gem/bin/calabash-android,明确禁止包含Operations模块:https://github.com/calabash/calabash-android/commit/995daef9b6636e7e4e572aeb5d4f90d6d072320f所以我想这不再是推荐的方法。如果我删除了包含,只需输入Calabash::Android::Operations.wake_up即可获得NameError

1 个答案:

答案 0 :(得分: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