Firebase Robo 测试脚本不断失败

Firebase Robo Test Script keeps failing

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

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

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

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

另一个样本

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

机器人脚本示例

[
  {
    "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)

你说得对,Roboscript 未能单击 Verify Phone Number 按钮,结果表明 Roboscript 在单击此按钮的操作 3 上失败。

总的来说,我认为问题可能更多地与 API 级别相关,而不是特定的物理(或虚拟)设备以及您录制的设备之间的 API 级别差异您的 Roboscript 和执行它的设备。克服任何差异的最佳方法是尽可能简化您的 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
  },