alipay / SoloPi

SoloPi 自动化测试工具
Apache License 2.0
5.81k stars 1.21k forks source link

[BUG]快速点击时失效 #155

Open orangex opened 4 years ago

orangex commented 4 years ago

Describe the bug / 问题描述 点击失效: 在某些情况下(快速点击),TouchEventTracker 解析当前触摸事件时通过 cmdLine.readUntilSomething() 拿到的 getEvent 输出有莫名其妙的多余的换行符。 导致 doContentParse() 时以回车为分割符分离出的 lines (String[] lines = result.split("\n");)变得破碎。 举例: 正常情况应该得到如下的 lines:

 [  528400.942517] /dev/input/event4: EV_ABS       ABS_MT_TRACKING_ID   00008a1a  
    [  528400.942517] /dev/input/event4: EV_KEY       BTN_TOUCH            DOWN                
    [  528400.947728] /dev/input/event4: EV_ABS      ABS_MT_POSITION_X    0000040a      
    [  528400.942517] /dev/input/event4: EV_ABS       ABS_MT_TRACKING_ID   00008a1a  
    [  528400.942517] /dev/input/event4: EV_KEY       BTN_TOUCH            DOWN                
    [  528400.947728] /dev/input/event4: EV_ABS      ABS_MT_POSITION_X    0000040a     

异常情况下:

    [  528400.942517] /dev/input/event4: EV_ABS       ABS_MT_TRACKING_ID   00008a1a   
    [  528400.942517] /dev/input/event4: 
    EV_KEY      
     BTN_TOUCH            DOWN                
    [  528400.947728] /dev/input/event4: EV_ABS      
     ABS_MT_POSITION_X    0000040a      

这样会导致对每个 line 解析时异常,因此涉及到 BTN_TOUCH DOWN、 ABS_MT_POSITION_X/Y 等最终没能消费成功。 此外,还会引起 getEventMicroSecond()content = content.split("\\[")[1].replace(".", "");数组越界异常。

To Reproduce / 复现流程 举个复现的例子: 点击某处,唤出 Node 的 FunctionView 。 点击窗口之外取消弹窗后迅速点击,尝试唤出 FunctionView,此时就会失败(也就是不会弹出 FunctionView)

Device Info / 设备信息

Additional context/其他内容

不知道这个是不是 Adblib 的 bug,多次测试发现只出现在快速点击的情况下(已经排除掉 SoloPI 主动过滤短时间重复点击的逻辑)。 此外,Minicap 在基于 Android 9 和 Android 10 的 MIUI 上截图必然失败,不考虑个降级方案吗? screencap 啥的

cathor01 commented 4 years ago

getevent解析时,由于目前是没半秒钟读取一次并解析, 所以可能导致上文出现的断行情况,这点预计下个版本修复。 第二点之前考虑通过screencap截图,但执行速度还是有些慢的,关于MIUI截图失败的问题,我们也在找另外的截图形式,可以继续关注下github发布信息。