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
},
我们正在使用带有 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
},