看起来像葫芦pre-defined steps不足以满足我的使用需求。
我的场景是这样的:
- 如果用户第一次登录,我的应用程序会弹出一个包含 EditText
字段的 View ,要求用户输入昵称,然后用户输入姓名,例如“John”并按 OK 按钮,然后我的应用会弹出一个包含文本“Ready to go”的 View 。
- 如果用户不是第一次登录,我的应用会弹出一个 View ,其中包含文本“Ready to go”
(在我的应用程序代码中,我检查是否存在唯一标识,如果没有,则为第一次登录)
我可能是错的,但我想我需要为这种情况在 Ruby 中编写自己的步骤定义,我查看了下面的示例代码:
Then /^I see the text "([^\"]*)"$/ do |text|
macro %Q|I should see "#{text}"|
我迷路了。 我的问题是:
Q1。是否可以从 calabash 调用 Android SDK API,以便我也可以通过 ruby 代码检查这是否是第一次登录?
Q2。如果上述问题的答案是否定的,如果第一次登录与非第一次登录时 View 可能不同,我如何使用葫芦来测试我的案例。 (想象一下我需要在某些设备上多次运行测试,第一次登录 View 与其余时间不同)
最佳答案
如果您正在测试一个 Android 应用程序,这个应用程序很可能会创建一个共享首选项文件。
所以你可以使用adb检查此文件是否存在和/或解析其内容。
首先通过尝试列出和检查应用程序创建的文件来手动执行此操作,以映射在什么情况下发生的某些变化可能会给您一个迹象,表明这不是第一次登录:
# listing some app's prefs
$ adb run-as com.myapp.package ls shared_prefs/
# some file contents
$ adb run-as com.myapp.package cat shared_prefs/someprefs.xml
以下示例函数运行 adb 命令以列出位于应用程序数据目录内的 shared_prefs 目录中的文件:
def list_shared_pref(your_app_package_id)
`adb -s #{ENV['ADB_DEVICE_ARG']} run-as #{your_app_package_id} ls shared_prefs/`
end
请注意,-s 修饰符是可选的,如果您同时连接多个设备,它用于选择特定的序列号,序列号应作为环境变量导出(ADB_DEVICE_ARG ).
并且您需要提供当前应用程序包 ID(类似于 com.android.camera)
假设您发现当用户执行首次登录时,应用会创建一个名为 firstLogin.xml 的共享首选项,那么您可以执行以下操作:
def is_first_login
list_shared_pref('com.yourapp.packageid').include? "firstLogin.xml"
end
您可以在 step_definitions 目录中声明的自定义步骤中调用该函数:
Given(/^I'm not in first login$/) do
unless is_first_login
# DO STUFF
else
raise "Error: Did not expected to be the first login"
end
# optional pause
sleep(STEP_PAUSE)
end
更新:
关于android - Calabash 步骤检查应用程序是否是第一次运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38499166/