Calabash测试系统对话框正在显示并与之交互

Lee*_*fin 9 ruby android calabash calabash-android

我的android app项目以编程方式启动系统对话框以安装可信CA证书:

Intent intent = KeyChain.createInstallIntent();
intent.putExtra(KeyChain.EXTRA_PKCS12, certificate);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Run Code Online (Sandbox Code Playgroud)

此代码弹出系统对话框,如下所示: 在此输入图像描述

以上是关于我的Android应用程序项目.现在,关于测试:

我正在使用Calabash为我的项目编写自动验收测试.

我知道Calabash提供了预定义的步骤定义.但这些步骤提供了与app的UI组件交互的关键字(例如输入文本,按下按钮).我无法找到如何使用这些预先定义的步骤来测试是否系统对话框中显示.

我的问题:

Q1.如何使用Calabash预定义的步骤定义来检查系统对话框?如何在对话框中输入文字?

Q2.如果回答Q1是"不可能的",那么,我如何使用Calabash进行测试呢?看起来我需要编写自己的Ruby函数来测试它?如果是这样,如何编写Ruby函数来测试这个系统对话框,以及如何在测试中使用Calabash与系统对话框进行交互?

Rog*_*oto 0

您需要为此编写代码。假设这是一个默认的警报对话框:

这将断言 AlertDialog 类型的视图是否可见。

def check_if_dialog_open
   check_element_exists('*AlertDialog')
end
Run Code Online (Sandbox Code Playgroud)

如果找到并隐藏键盘,这将向第一个 EditText 输入一些文本。

def input_into_dialog(some_text)
    enter_text("android.widget.EditText *", some_text)
    hide_soft_keyboard
end
Run Code Online (Sandbox Code Playgroud)

然后您可以为此编写自己的步骤:

Then(/^I check if my dialog is open and input some text$/) do
  check_if_dialog_open

  input_into_dialog('my text')

  sleep(STEP_PAUSE)
end
Run Code Online (Sandbox Code Playgroud)

要在该对话框中输入,您可以查询可见的 EditText。

这只是细化您的查询的问题。您可以使用 calabash 控制台确认这是否是默认的 Android AlertDialog。

在此处了解有关控制台和查询语法的更多信息,并在此处查看有关 Ruby API 的更多信息。