首页 > 解决方案 > 在 Firebase Robo 测试中选择帐户

问题描述

我们的应用程序有一个“谷歌”帐户选择功能(不验证;只是链接)

这是谷歌帐户选择器意图的样子

Intent intent = AccountPicker.newChooseAccountIntent(null,
                null,
                new String[]{"com.google"},
                true,
                null,
                null,
                null,
                null);
        startActivityForResult(intent, REQUEST_CODE_PICK_ACCOUNT)

当我在模拟器中测试应用程序时,我选择了一个虚拟谷歌帐户。在捕获 Robo 测试记录时,我也会这样做。

在显示帐户选择提示之前,我的 Robo json 看起来像这样

{
    "eventType": "VIEW_CLICKED",
    "timestamp": 1567317991869,
    "replacementText": "Choose a Google Account",
    "actionCode": -1,
    "delayTime": 0,
    "canScrollTo": false,
    "elementDescriptors": [
      {
        "className": "android.support.v7.widget.AppCompatButton",
        "recyclerViewChildPosition": -1,
        "adapterViewChildPosition": -1,
        "groupViewChildPosition": 2,
        "resourceId": "com.app.xyz:id/btn_main_propic",
        "contentDescription": "",
        "text": "Choose a Google Account"
      },
      {
        "className": "android.widget.RelativeLayout",
        "recyclerViewChildPosition": -1,
        "adapterViewChildPosition": -1,
        "groupViewChildPosition": 0,
        "resourceId": "com.app.xyz:id/id_main_rlyt",
        "contentDescription": "",
        "text": ""
      },
      {
        "className": "android.support.v7.widget.ContentFrameLayout",
        "recyclerViewChildPosition": -1,
        "adapterViewChildPosition": -1,
        "groupViewChildPosition": 0,
        "resourceId": "android:id/content",
        "contentDescription": "",
        "text": ""
      }
    ]
  }

选择帐户后,我的机器人脚本就有了。

{
    "eventType": "VIEW_CLICKED",
    "timestamp": 1567318000894,
    "replacementText": "I Agree, Proceed",
    "actionCode": -1,
    "delayTime": 0,
    "canScrollTo": false,
    "elementDescriptors": [
      {
        "className": "android.support.v7.widget.AppCompatButton",
        "recyclerViewChildPosition": -1,
        "adapterViewChildPosition": -1,
        "groupViewChildPosition": 5,
        "resourceId": "com.app.xyz:id/btn_first_proceed",
        "contentDescription": "",
        "text": "I Agree, Proceed"
      },
      {
        "className": "android.widget.RelativeLayout",
        "recyclerViewChildPosition": -1,
        "adapterViewChildPosition": -1,
        "groupViewChildPosition": 0,
        "resourceId": "com.app.xyz:id/id_main_rlyt",
        "contentDescription": "",
        "text": ""
      },
      {
        "className": "android.support.v7.widget.ContentFrameLayout",
        "recyclerViewChildPosition": -1,
        "adapterViewChildPosition": -1,
        "groupViewChildPosition": 0,
        "resourceId": "android:id/content",
        "contentDescription": "",
        "text": ""
      }
    ]
  }

正如您在上面看到的,没有选择帐户的条目。即点击帐户名称。
现在这就是我在云中测试它时出现问题的地方。Robo 没有使用现有的 google 帐户,而是去创建新帐户并失败。

云测试中的提示是这样的。

云测试中谷歌账号选择提示

测试应该选择第一个选项。相反,它选择“添加帐户”选项并开始创建帐户并失败。

问题是。

  1. 为什么 robo json 没有捕获帐户选择步骤?
  2. 在云端设备中使用现有的 google 帐户需要做什么?

请注意,它不是本页中解释的身份验证。它只是一个现有帐户的链接(任何帐户都可以)。

标签: androidfirebaseui-automationfirebase-test-lab

解决方案


  1. Roboscript 记录器未捕获帐户选择步骤,因为选择对话框不是记录的应用程序的一部分。您可以使用 Run | 确认这一点。在 Android Studio 中录制 Espresso 测试。Espresso 测试记录器也不会捕获您在帐户选择对话框中的操作。由于帐户选择操作不是记录的 Roboscript 的一部分,因此当在 Robo 爬网期间出现帐户选择对话框时,Robo 将尝试从 Roboscript 执行“我同意,继续”。由于此操作失败,因为在屏幕上找不到相应的 UI 元素,Robo 放弃执行 Roboscript 并开始正常抓取,出于某种原因选择了第二个选项(“添加帐户”)(请注意,即使 Robo 选择了第一个选项,此时不再执行 Roboscript,

  2. 在正常的 Robo 抓取中,如您链接的用户帮助页面所述,Robo 将自动执行 Google 登录。在您的情况下,此登录(不是登录,而是帐户选择)发生在 Roboscript 的步骤中,因此确保 Roboscript 完全执行的唯一方法是将缺少的操作注入其中。您可以手动编辑录制的 Roboscript,在上面列出的两个 Roboscript 操作之间添加以下操作。将占位符替换为您希望 Robo 单击的元素的实际值,尽管类名不需要精确。此外,您可以使用下面的代码和上面记录的 Roboscript 操作示例作为起点进一步调整此操作。


  {
    "eventType": "VIEW_CLICKED",
    "elementDescriptors": [
      {
        "className": "some_class_name",
        "text": "text_of_the_option_to_pick"
      }
    ]
  },

或者,您可以调整您的应用程序,使其在录制和重播 Roboscript 时不显示应用程序外对话框,例如,通过以编程方式链接现有帐户。


推荐阅读