【问题标题】:Firebase Robo Test Script keeps failingFirebase Robo 测试脚本不断失败
【发布时间】:2021-07-29 19:31:00
【问题描述】:

我们正在使用带有电话身份验证的 Firebase UI,但 Robo Script 似乎无法正常使用它。像 LG Nexus 5、API 级别 23 锤头这样的设备在脚本的某些部分之后工作正常,但我们尝试的许多其他物理设备在脚本之后都失败了。

这是使用 Firebase Auth 和 LG Nexus 5 的成功 OTP

这个一开始就完全不对三星SM-G981U1

带有 Robo 脚本的非工作物理设备的列表还在继续,不确定 Nexus 5 有什么特别之处,或者可能与屏幕分辨率有关?我注意到的一件事是在将 9876543210 放入 Firebase UI 电话的 EditText Auth 之后,使用 Robo Script 的测试设备总是无法单击 Verify Phone Number 按钮,其中最有可能发生错误,除了 LG Nexus 5 成功执行了这部分脚本。

另一个样本

在这里它应该在成功将9876543210 放入基于我们的 Robo 脚本的 EditText 后点击 Verify Phone Number 按钮,但它没有,整个输入被替换为 6504992804,我们从未记录过,而不是在 Robo脚本。所以我们的结论是错误通常是由于脚本未能满足Verify Phone Number按钮的点击而发生的。

Robo 脚本示例

[
  {
    "eventType": "DELAYED_MESSAGE_POSTED",
    "timestamp": 1627584568123,
    "actionCode": -1,
    "delayTime": 7000,
    "canScrollTo": false,
    "elementDescriptors": []
  },
  {
    "eventType": "VIEW_TEXT_CHANGED",
    "timestamp": 1627584581148,
    "replacementText": "9876543210",
    "actionCode": -1,
    "delayTime": 0,
    "canScrollTo": true,
    "elementDescriptors": [
      {
        "className": "com.google.android.material.textfield.TextInputEditText",
        "recyclerViewChildPosition": -1,
        "adapterViewChildPosition": -1,
        "groupViewChildPosition": 0,
        "resourceId": "com.devsbitwise.cryptonian:id/phone_number",
        "contentDescription": "",
        "text": ""
      },
      {
        "className": "android.widget.FrameLayout",
        "recyclerViewChildPosition": -1,
        "adapterViewChildPosition": -1,
        "groupViewChildPosition": 0,
        "resourceId": "",
        "contentDescription": "",
        "text": ""
      },
      {
        "className": "com.google.android.material.textfield.TextInputLayout",
        "recyclerViewChildPosition": -1,
        "adapterViewChildPosition": -1,
        "groupViewChildPosition": 1,
        "resourceId": "com.devsbitwise.cryptonian:id/phone_layout",
        "contentDescription": "",
        "text": ""
      }
    ]
  },
  {
    "eventType": "VIEW_CLICKED",
    "timestamp": 1627584599899,
    "replacementText": "Verify Phone Number",
    "actionCode": -1,
    "delayTime": 0,
    "canScrollTo": true,
    "elementDescriptors": [
      {
        "className": "com.google.android.material.button.MaterialButton",
        "recyclerViewChildPosition": -1,
        "adapterViewChildPosition": -1,
        "groupViewChildPosition": 2,
        "resourceId": "com.devsbitwise.cryptonian:id/send_code",
        "contentDescription": "",
        "text": "Verify Phone Number"
      },
      {
        "className": "androidx.constraintlayout.widget.ConstraintLayout",
        "recyclerViewChildPosition": -1,
        "adapterViewChildPosition": -1,
        "groupViewChildPosition": 0,
        "resourceId": "",
        "contentDescription": "",
        "text": ""
      },
      {
        "className": "android.widget.ScrollView",
        "recyclerViewChildPosition": -1,
        "adapterViewChildPosition": -1,
        "groupViewChildPosition": 1,
        "resourceId": "",
        "contentDescription": "",
        "text": ""
      }
    ]
  },
  {
    "eventType": "DELAYED_MESSAGE_POSTED",
    "timestamp": 1627584605228,
    "actionCode": -1,
    "delayTime": 500,
    "canScrollTo": false,
    "elementDescriptors": []
  },

更新

最后剩下的问题可能是一致性,这里我在第一次测试中使用了相同的 Robo 脚本,但在第二次测试中完全没有更改代码,它失败了。

第一次测试(Nexus 5 虚拟 SDK 21)

第二次测试(Nexus 5 虚拟 SDK 21)

第一次测试(Nexus 9 虚拟 SDK 24)

第二次测试(Nexus 9 虚拟 SDK 24)

第一次测试(Nexus 7 虚拟 SDK 22)

第二次测试(Nexus 7 虚拟 SDK 22)

【问题讨论】:

    标签: android firebase firebase-test-lab


    【解决方案1】:

    你是对的,Roboscript 未能点击Verify Phone Number 按钮,因为结果表明 Roboscript 在操作 3 上失败,即点击此按钮。

    总的来说,我认为问题可能更多地与 API 级别有关,而不是特定的物理(或虚拟)设备,以及您录制 Roboscript 的设备和执行它的设备之间的 API 级别差异.克服任何差异的最佳方法是尽可能简化您的 Roboscript。例如,只要您的目标元素具有唯一的标识属性(例如,资源 id、文本等),您就可以仅使用这些属性来标识它们,如下所示:

    [
      {
        "eventType": "DELAYED_MESSAGE_POSTED",
        "delayTime": 7000
      },
      {
        "eventType": "VIEW_TEXT_CHANGED",
        "replacementText": "9876543210",
        "elementDescriptors": [
          {
            "resourceId": "com.devsbitwise.cryptonian:id/phone_number"
          }
        ]
      },
      {
        "eventType": "VIEW_CLICKED",
        "elementDescriptors": [
          {
            "resourceId": "com.devsbitwise.cryptonian:id/send_code"
          }
        ]
      },
      {
        "eventType": "DELAYED_MESSAGE_POSTED",
        "delayTime": 500
      },
    

    【讨论】:

    • 谢谢,这个样本本身应该可以工作吗?
    • 我尝试像上面示例中的那样简化它,但在我测试的许多物理设备中,仍然只有 LG Nexus 5 锤头与 Firebase Auth OTP 兼容。
    • Roboscript 是否在与以前相同的操作中失败(即,未单击 Verify Phone Number 按钮)?
    • 是的和以前一样的问题
    • 嗯,这很奇怪,因为这意味着当 Roboscript 试图执行此单击操作。要进一步排除故障,您可以将 "resourceId": "com.devsbitwise.cryptonian:id/send_code" 替换为 "text": "Verify Phone Number" 进行此点击操作和/或在此点击之前添加延迟 ("DELAYED_MESSAGE_POSTED")操作(以防屏幕需要一些时间来稳定)。
    猜你喜欢
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 2022-06-17
    • 2014-07-13
    • 2018-09-27
    • 2017-01-11
    • 2023-03-20
    相关资源
    最近更新 更多