【shell】linux设备 通过捕捉event实现简单UI自动化

【shell】linux设备 通过捕捉event实现简单UI自动化,第1张

    这边收到了很多ai硬件设备,需要做压力测试、稳定性测试。苦于非安卓系统,不能借助input tap等方式进行ui自动化,也没找到合适的工具。上网查了资料加上自己多次测试排了一些坑,基本可以通过捕捉event实现简单UI自动化。

    /dev/input目录下的事件都是在驱动中调用input_register_device(struct input_dev *dev)产生的。

每个event将上报指定的事件:

比如:

通常触摸屏事件就会上报坐标轴事件,电源键比如按下是 1,松开是 0。而与event对应的相关设备信息位于/proc/bus/input/devices。可以直接cat 查看devces信息。小米手机为例:

    首先要会捕捉触摸屏以及所需要控制的按键事件,安卓系统比较简单,用自带的getevent就可以了。这边用小米手机为例:

我这边使用的触摸屏事件,打印的event1信息,可以理解为event1上报触摸屏事件。同样,使用电源键、音量键、home键也会用不同的event信息打印:

这里对应event0、event3、event4

但是在绝大多数linux是没有的!!!(有时候BSP对带,which一下就知道了)

如果没有的话只能编译一个放进去,这里推荐evtest

编译方法:

注:arm设备需要使用特定的交叉编译工具,否则可能无法执行;

方法:evtest /dev/input/event

通过evtest.c可以查看设备事件消息,通过TouchScreen.c可以实现点触摸屏某个坐标

[参考文档]( https://download.csdn.net/download/asd2479745295/10712830 )

编译文件push到设备。./touch xxx yyy

这边在使用时懒得充值,没找到合适的免费资源,找到了另一种解决方法。

( https://www.jianshu.com/p/6b5a172e064a )

可以参考之前一篇模拟快速点击的方法;

捕捉:

使用dd指令

模拟:

1、反向使用

2、可以使用追加

此方法可以模拟点击、滑屏、快速点击,各种实体按键短按、长按、快速点击等。暂时没有找到触摸屏长按的方法,原因是 无法控制长按的时间(追加的速度过快),但是可以通过脚本循环实现。

一个简单的循环,测试可以实现长按,但是不好控制时间,有一个思路是获取获取linux系统时间,在循环体中,true修改成时间条件但是可能打断长按事件。

还有一种可行性高,就是单独做成一个脚本供调用,另一个主脚本控制时间,到时间后kill进程来控制。方法很多,因为工作中没有用到这一项就没测试了。

1、ubuntu下编译解决。

2、捕捉的evest为空

数据量太少,dd的版本较低。更新busybox或者dd版本

3、while((1))报错

设备没有bash,只有sh,修改为while((true))可以解释通过。

用 xinput 来禁用/启用输入设备。我经常用 synclient 来关掉我的触摸板, 或者用 xinput 来关闭我的笔记本键盘。

第一步我们需要先拿到设备的名字或者ID:

$ xinput list

⎡ Virtual core pointer id=2[master pointer (3)]

⎜ ↳ Virtual core XTEST pointerid=4[slave pointer (2)]

⎜ ↳ USB Optical Mouse id=8[slave pointer (2)]

⎜ ↳ SynPS/2 Synaptics TouchPadid=7[slave pointer (2)]

⎣ Virtual core keyboard id=3[master keyboard (2)]

↳ Virtual core XTEST keyboard id=5[slave keyboard (3)]

↳ Sleep Button id=9[slave keyboard (3)]

↳ Power Button id=10 [slave keyboard (3)]

↳ Video Bus id=11 [slave keyboard (3)]

↳ AT Translated Set 2 keyboard id=6[slave keyboard (3)]

在这里触摸板的名字是 'SynPS/2 Synaptics TouchPad' ID是 7

键盘的名字是 'AT Translated Set 2 keyboard' ID是 6.

下一步我们要知道设备都有什么属性:

$ xinput list-props 'AT Translated Set 2 keyboard'

Device 'AT Translated Set 2 keyboard':

Device Enabled (127): 1

键盘只有一个属性 'Device Enabled' 他的值是 1,意思就是说键盘是打开状态的。

我们来尝试关掉它:

sleep 0.1 xinput set-prop 'AT Translated Set 2 keyboard' 'Device Enabled' 0 sleep 5 xinput set-prop 'AT Translated Set 2 keyboard' 'Device Enabled' 1

开头 sleep 0.1 的目的是要留出时间让你执行当前命令时所敲的回车的按键(keypress)事件能够完成, 我猜测当你按下回车时命令就会执行并把键盘禁用,但是按键d起(keyup)还没有被发送,所以X会以为你一直按这回车键。

另一个更简单的用法是用ID来进行 *** 作,这样你就不需要输入一大长串的名字了:

sleep 0.1 xinput set-prop 8 127 0 sleep 5 xinput set-prop 8 127 1

键盘的ID是8, 属性 'Device Enabled' 的ID是127。 当你用 list-props 列出设备属性时, 在属性名后面的数字就是属性的ID。 像 'Device Enabled' 的ID总是 127,但是设备的ID就不一样,它跟设备的连接时间有关,一般越先连接的设备ID越小,之后会越来越大。

PS:设置设备属性不需要root权限。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7548840.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-07
下一篇 2023-04-07

发表评论

登录后才能评论

评论列表(0条)

保存