我正在尝试在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
.
我偶尔会遇到此错误,最终将屏幕超时设置为超过一分钟,并在开始测试之前运行此方法:
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