由于android Studio记录robo脚本无法记录页面滚动事件,导致Firebase Roboscript中止

时间:2019-05-22 13:40:56

标签: android firebase android-studio firebase-test-lab

我已经从android studio录制了一个robo脚本(android studio-> tools-> Firebase-> test Lab-> record robo script)。在我的活动中,我的recyclerview包含大约20个值(编辑文本),如图所示在create.png图片中。因此,当我通过滚动该回收者视图将值放入所有20个编辑文本中时,记录了此活动的robo脚本。然后,我将此脚本文件以及生成的.apk文件上传到Firebase测试实验室。但在测试结果中,它显示“机器人被中止”。并且此错误是针对滚动后填充的编辑文本值。那么,有什么方法可以在录制时在robo脚本中添加滚动事件,因为当前android studio尚未录制任何滚动事件?Click here for create.png

下面是录制的自动脚本(.json文件)

{
"eventType": "VIEW_CLICKED",//Last edittext value before scrolling
"timestamp": 1558518939378,
"replacementText": "Normal",
"actionCode": -1,
"delayTime": 0,
"canScrollTo": false,
"elementDescriptors": [
  {
    "className": "android.support.v7.widget.AppCompatRadioButton",
    "recyclerViewChildPosition": -1,
    "adapterViewChildPosition": -1,
    "groupViewChildPosition": 0,
    "resourceId": "com.badger.badgermap:id/radioBtn",
    "contentDescription": "",
    "text": "Normal"
  },
  {
    "className": "android.support.constraint.ConstraintLayout",
    "recyclerViewChildPosition": -1,
    "adapterViewChildPosition": -1,
    "groupViewChildPosition": 1,
    "resourceId": "com.badger.badgermap:id/rowCreateNewCheckInConstraintLayout",
    "contentDescription": "",
    "text": ""
  },
  {
    "className": "android.support.v7.widget.RecyclerView",
    "recyclerViewChildPosition": -1,
    "adapterViewChildPosition": -1,
    "groupViewChildPosition": 3,
    "resourceId": "com.badger.badgermap:id/recyclerViewOptions",
    "contentDescription": "",
    "text": ""
  }
]
  },
  {
"eventType": "DELAYED_MESSAGE_POSTED",
"timestamp": 1558518940996,
"actionCode": -1,
"delayTime": 20000,
"canScrollTo": true,
"elementDescriptors": []
 },
  {
   "eventType": "VIEW_TEXT_CHANGED",     // edittext value  after                                         
                                            scrolling. after this script 
                                             gets aborted
"timestamp": 1558518955414,
"replacementText": "222",
"actionCode": -1,
"delayTime": 0,
"canScrollTo": false,
"elementDescriptors": [
  {
    "className": "android.support.v7.widget.AppCompatEditText",
    "recyclerViewChildPosition": -1,
    "adapterViewChildPosition": -1,
    "groupViewChildPosition": 1,
    "resourceId": "com.badger.badgermap:id/textViewValue",
    "contentDescription": "",
    "text": ""
  },
  {
    "className": "android.widget.RelativeLayout",
    "recyclerViewChildPosition": -1,
    "adapterViewChildPosition": -1,
    "groupViewChildPosition": 2,
    "resourceId": "com.badger.badgermap:id/MassUpdateLayout",
    "contentDescription": "",
    "text": ""
  },
  {
    "className": "android.support.v7.widget.RecyclerView",
    "recyclerViewChildPosition": -1,
    "adapterViewChildPosition": -1,
    "groupViewChildPosition": 3,
    "resourceId": "com.badger.badgermap:id/recyclerViewAdditionalFields",
    "contentDescription": "",
    "text": ""
  }
]
 },

1 个答案:

答案 0 :(得分:0)

在这种情况下,问题不在于滚动,而在于到目前为止,Robo Script Recorder(RSR)仅在对其直接子级执行操作时才考虑使用RecyclerViews。如果是这种情况,RSR将记录在其上执行操作的元素的RecyclerView索引,并且在重播此脚本时,Robo将滚动到该元素,作为执行记录的操作的一部分(即,无需记录专用的滚动条)动作)。

但是,在您的情况下,对其执行操作的元素是RecyclerView的孙代。结果,RSR没有考虑RecyclerView,也没有在记录的脚本中捕获元素的RecyclerView索引。因此,在重放脚本时,Robo不会滚动到该元素,因此无法在屏幕上找到它。

如果您有兴趣支持对RecyclerViews的非直接子级操作,请随时提交功能请求https://issuetracker.google.com/issues/new?component=192775。请注意,此链接将带您为Espresso Test Recorder(ETR)提交功能请求,但ETR和RTR都为RecyclerViews共享相同的记录逻辑。