Calabash - 将应用程序发送到后台并返回 (Android)
Calabash - Send app to background and come back (Android)
我正在使用 Calabash 测试我的 android 应用程序,除了一个小细节外,一切都很好。我覆盖了 onPause() 和 onResume() 方法来执行某些操作,我想测试它们。问题是我不确定如何用葫芦来做。
我读到我们可以将应用程序发送到后台执行
system("adb shell input keyevent KEYCODE_HOME")
参考:(Calabash -Android: Can we simulate Home button on Android devices for Calabash-Android?)
测试 onPause() 方法没问题,但我还需要测试 onResume(),为此我需要返回应用程序。这可能吗?
谢谢!
我承认我没有使用 Calabash 的经验,但由于您似乎可以访问 adb,您可以在 adb 中使用 "am" 命令来启动 activity:
adb shell am start -n com.somepackagename/com.somepackagename.SomeActivityName
只需在此处输入您的应用程序包和 activity class 名称,它将模拟您从启动器启动应用程序。
但是请注意,根据 activity 的 launch mode (singleTop 等),这可能会导致启动 activity 的新实例,或者 运行在后台恢复中。
技术上不支持...在下面我有我的解决方法似乎有效。
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
。我不知道这一切有多可靠,但它适用于我正在测试的应用程序。
我已按以下方式实施 - 如果 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
我正在使用 Calabash 测试我的 android 应用程序,除了一个小细节外,一切都很好。我覆盖了 onPause() 和 onResume() 方法来执行某些操作,我想测试它们。问题是我不确定如何用葫芦来做。
我读到我们可以将应用程序发送到后台执行
system("adb shell input keyevent KEYCODE_HOME")
参考:(Calabash -Android: Can we simulate Home button on Android devices for Calabash-Android?)
测试 onPause() 方法没问题,但我还需要测试 onResume(),为此我需要返回应用程序。这可能吗?
谢谢!
我承认我没有使用 Calabash 的经验,但由于您似乎可以访问 adb,您可以在 adb 中使用 "am" 命令来启动 activity:
adb shell am start -n com.somepackagename/com.somepackagename.SomeActivityName
只需在此处输入您的应用程序包和 activity class 名称,它将模拟您从启动器启动应用程序。
但是请注意,根据 activity 的 launch mode (singleTop 等),这可能会导致启动 activity 的新实例,或者 运行在后台恢复中。
技术上不支持...在下面我有我的解决方法似乎有效。
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
。我不知道这一切有多可靠,但它适用于我正在测试的应用程序。
我已按以下方式实施 - 如果 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