【问题标题】:Choosing Account in Firebase Robo Test在 Firebase Robo 测试中选择帐户
【发布时间】:2020-01-04 21:56:15
【问题描述】:

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

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

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": ""
      }
    ]
  }

而且选择账号后,我的robo脚本就有了。

{
    "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账号需要做什么?

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

【问题讨论】:

    标签: android firebase ui-automation firebase-test-lab


    【解决方案1】:
    1. Roboscript 记录器未捕获帐户选择步骤,因为选择对话框不是记录的应用程序的一部分。您可以使用 Run | 确认这一点。在 Android Studio 中录制 Espresso 测试。 Espresso 测试记录器也不会捕获您在帐户选择对话框中的操作。由于帐户选择操作不是记录的 Roboscript 的一部分,因此当在 Robo 爬网期间出现帐户选择对话框时,Robo 将尝试从 Roboscript 执行“我同意,继续”。由于此操作失败,因为在屏幕上找不到相应的 UI 元素,Robo 放弃执行 Roboscript 并开始正常抓取,出于某种原因选择了第二个选项(“添加帐户”)(请注意,即使 Robo 选择了第一个选项,此时不再执行 Roboscript,因此在后续屏幕上无论如何都不会执行 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 时不显示应用外对话框,例如,通过以编程方式链接现有帐户。

    【讨论】:

    • 你能帮我识别一下,是机器人还是真实用户?需要为侵入性较小的机器人脚本注入一些自定义逻辑。
    • Robo 的行为尽可能接近真实应用用户的行为方式。如果您想为 Robo 更改应用的行为,我建议您为 Robo 抓取准备一个自定义 APK,而不是将用于处理 Robo 抓取的自定义逻辑注入到公开可用的 APK 中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多