0

我正在用 Calabash 测试我的 android 应用程序,除了一个小细节外,一切都很好。我重写 onPause() 和 onResume() 方法来执行某些操作,我想测试它们。问题是我不确定如何用葫芦做。

我读到我们可以将应用程序发送到后台执行

system("adb shell input keyevent KEYCODE_HOME")

参考:(Calabash -Android:我们可以在 Android 设备上为 Calabash-Android 模拟 Home 按钮吗?

这对于测试 onPause() 方法没问题,但我还需要测试 onResume() 并且为此我需要回到应用程序。那可能吗?

谢谢!

4

3 回答 3

2

技术上不支持...在此之下,我的解决方法似乎可行。

http://www.rubydoc.info/gems/calabash-android/0.5.8/Calabash/Android/Operations:app_to_background

尚未实施

def app_to_background(secs)
  ni
end

在我的功能文件中:

@automated @high @test
Scenario Outline: Login with keep me signed in background and relaunch
  Given I am on the Login page
  When I check keep me signed in 
  When I log into Overview page with "<acct>"
  When I background the app
  When I relaunch the app 
  Then I am on the Overview page 

我对背景和重新启动的步骤定义:

When /I background the app/ do
  `adb shell input keyevent KEYCODE_HOME`
  sleep(5)
end

When  /I relaunch the app/ do
  attempts = 0
  begin
    attempts = attempts + 1
    start_test_server_in_background
  rescue RuntimeError => e 
    retry if attempts < 3
  end  
    sleep(5)
end 

start_test_server_in_background(上图)将我带回应用程序,而不是登录屏幕。你注意到我的脚步声When I check keep me signed in。我不知道这一切有多可靠,但它适用于我正在测试的应用程序。

于 2015-04-22T20:43:23.723 回答
1

我承认我没有使用 Calabash 的经验,但是由于您似乎可以访问 adb,因此您可以使用 adb 中的“am”命令来启动活动:

adb shell am start -n com.somepackagename/com.somepackagename.SomeActivityName

只需在此处输入您的应用程序包和活动类名称,它将模拟您从启动器启动应用程序。

但是请注意,根据您的活动的启动模式(singleTop 等),这可能会导致您的活动的新实例被启动,或者在后台运行的实例被恢复。

于 2015-02-25T09:24:20.043 回答
0

我已经通过以下方式实现了这一点 - 如果 ipad 和 iphone 步骤不适用于您,请忽略它们。

Then(/^I deactivate app for (\d+) seconds$/) do |arg1|
  if $device == "ipad" || $device == "iphone"
    send_uia_command(:command => "target.deactivateAppForDuration(5)")
  elsif $device == "androidtablet" || $device == "androidphone"
    system("#{default_device.adb_command} shell input keyevent KEYCODE_HOME")
    sleep(5)
    system("#{default_device.adb_command} shell am start -n com.somepackagename/com.somepackagename.SomeActivityName")
    sleep(2)
  end
end
于 2016-04-28T14:56:11.393 回答