2

我正在尝试在 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

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

4

1 回答 1

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
于 2014-12-09T17:08:36.637 回答