【问题标题】:Calabash test system dialog is showing & interact with itCalabash 测试系统对话框正在显示并与之交互
【发布时间】:2016-11-26 20:41:53
【问题描述】:

我的 android 应用程序项目以编程方式启动系统对话框以安装受信任的 CA 证书:

Intent intent = KeyChain.createInstallIntent();
intent.putExtra(KeyChain.EXTRA_PKCS12, certificate);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

此代码弹出系统对话框,如下所示:

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

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

我知道 Calabash 提供 pre-defined step definitions。但是这些步骤提供了与应用程序的 UI 组件交互的关键字(例如输入文本、按下按钮)。我无法找到如何使用这些预定义的步骤来测试系统对话框是否正在显示。

我的问题:

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

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

【问题讨论】:

    标签: android ruby calabash calabash-android


    【解决方案1】:

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

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

    def check_if_dialog_open
       check_element_exists('*AlertDialog')
    end
    

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

    def input_into_dialog(some_text)
        enter_text("android.widget.EditText *", some_text)
        hide_soft_keyboard
    end
    

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

    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
    

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

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

    了解更多关于控制台和查询语法 here 并查看更多关于 Ruby API 的信息 go here

    【讨论】:

    • 谢谢。但是我怎样才能弄清楚系统对话框的名称是什么?或者你的意思是*AlertDialog 可以用来匹配屏幕上当前显示的任何系统对话框?
    • 是的,这是一个通用示例……但除非有隐藏对话框,否则它将起作用。如果您想改进需求,您需要根据葫芦控制台输出过滤您的查询...进入葫芦控制台...使用查询(“*”)带入所有元素...寻找可以识别您的对话框...就像一个文本属性并将其添加到查询中。
    • 我搜了一下,很多人说系统UI元素对calabash是不可见的……我是不是误会了什么?
    • 你能在 Calabash 控制台中列出它吗?
    • 我用calabash-android查询,只能看到app的UI元素,没有列出系统UI元素。
    猜你喜欢
    • 1970-01-01
    • 2011-06-05
    • 2012-05-25
    • 1970-01-01
    • 2013-12-19
    • 1970-01-01
    • 1970-01-01
    • 2017-04-09
    • 1970-01-01
    相关资源
    最近更新 更多