AirtestIDE icon indicating copy to clipboard operation
AirtestIDE copied to clipboard

RuntimeError: SendInput() inserted only 0 out of 2 keyboard events

Open Wingoc opened this issue 6 years ago • 18 comments

设置本地python环境运行测试windows程序,但是在执行text()方法时报错:RuntimeError: SendInput() inserted only 0 out of 2 keyboard events; 本地python 环境已经安装位3.6.5版本; 奇怪的是,昨天配置好后还可以正常执行,今天重新打开的就报错了,是我本地Python版本不对吗? image

Wingoc avatar Jun 21 '19 02:06 Wingoc

麻烦把具体报错信息截图贴出来,就是AirtestIDE控制台黑窗口的报错信息 如果可以的话,可以贴一下具体出错的语句吗?

EraChen233 avatar Jun 21 '19 02:06 EraChen233

IDE的运行配置如下: image

然后直接在IDE执行脚本,执行到text()方法就报错了,是python环境的问题吗? image

Wingoc avatar Jun 21 '19 02:06 Wingoc

和这个issue好像是类似的问题:https://github.com/AirtestProject/Airtest/issues/429

yimelia avatar Jun 21 '19 02:06 yimelia

执行pip list看一下pywin32装的版本号是多少?以及Pywinauto这个库的版本号

yimelia avatar Jun 21 '19 02:06 yimelia

执行pip list看一下pywin32装的版本号是多少?以及Pywinauto这个库的版本号

image

Wingoc avatar Jun 21 '19 02:06 Wingoc

执行pip list看一下pywin32装的版本号是多少?以及Pywinauto这个库的版本号

不应该吧?关键是昨天也是这样的配置昨天还能正常执行的,脚本也没有动过,今天重新打开想调试下就执行不了...

Wingoc avatar Jun 21 '19 02:06 Wingoc

直接用你本地的python.exe来运行试试,不用IDE跑 从IDE执行的命令行内容里复制出launcher后面的内容,从.air脚本开始一直到命令行结尾,然后把IDE关闭(让你的windows窗口从IDE里释放出来) airtest run xx.air --device windows:///xxx --log xxx

yimelia avatar Jun 21 '19 02:06 yimelia

直接用你本地的python.exe来运行试试,不用IDE跑 从IDE执行的命令行内容里复制出launcher后面的内容,从.air脚本开始一直到命令行结尾,然后把IDE关闭(让你的windows窗口从IDE里释放出来) airtest run xx.air --device windows:///xxx --log xxx

image

Wingoc avatar Jun 21 '19 03:06 Wingoc

有可能是因为你的被测应用是32位的,但是你的python和pywinauto都是64位的,log里有个warning(被测应用是32位的话,需要尽量也用32位的python来运行),但是不能确定是不是这个问题导致的。 可以尝试换个应用(比如系统记事本),在IDE里嵌入之后运行text语句看看能否正确运行

yimelia avatar Jun 21 '19 03:06 yimelia

确保python+pywinauto是以管理员身份运行的,可能也有帮助,尽量用管理员身份开启动cmd窗口(和IDE)

yimelia avatar Jun 21 '19 03:06 yimelia

有可能是因为你的被测应用是32位的,但是你的python和pywinauto都是64位的,log里有个warning(被测应用是32位的话,需要尽量也用32位的python来运行),但是不能确定是不是这个问题导致的。 可以尝试换个应用(比如系统记事本),在IDE里嵌入之后运行text语句看看能否正确运行

尝试过系统的记事本程序,同样也是有该问题,感觉这个还是跟Python 环境与IDE之间的冲突问题吧,应用程序关系不大,虽说是有32/64位问题的警告,UserWarning: 32-bit application should be automated using 32-bit Python (you use 64-bit Python),但是用你刚才说的方法,把IDE关闭掉后把被测应用程序窗口释放出来后,直接执行airtest run...还是能能正常执行的,这问题有点坑,毕竟这样要调试测试脚本就比较麻烦了。 测试 记事本.exe 失败: image

关闭IDE 直接执行测试脚本 成功: image

Wingoc avatar Jun 21 '19 04:06 Wingoc

我看你发的两次纯命令行运行的log,一次成功一次失败,失败的那次是用了你要测的应用,成功的那次用的是记事本吗?

yimelia avatar Jun 21 '19 06:06 yimelia

我看你发的两次纯命令行运行的log,一次成功一次失败,失败的那次是用了你要测的应用,成功的那次用的是记事本吗?

不是的 , 失败的那次是直接用IDE配置本地的python.exe去执行测试脚本,测试对象是系统的笔记本程序,但脚本也是在text()那里报错了; 成功的那次是用IDE写好脚本之后,关闭IDE释放被测程序窗口(酷狗音乐.exe),然后直接用命令行执行"airtest run xxx...",成功了; 所以现在感觉就是IDE与本地的python有冲突的样子,在IDE中就无法使用本地Python.exe执行.air脚本,只能把IDE关闭后才能正常执行.air脚本。

Wingoc avatar Jun 21 '19 06:06 Wingoc

直接用你本地的python.exe来运行试试,不用IDE跑 从IDE执行的命令行内容里复制出launcher后面的内容,从.air脚本开始一直到命令行结尾,然后把IDE关闭(让你的windows窗口从IDE里释放出来) airtest run xx.air --device windows:///xxx --log xxx

image

所以这一次图里面的报错是连了什么应用程序的错误?这个错误看起来是直接airtest run跑出来的啊。

然后IDE中用本地python跑脚本,是直接跑类似这样的命令行,你也可以直接复制出来在命令行下面跑,效果是一样的,记得用管理员权限启动命令行:

X:\python.exe custom_launcher.py xx.air --device Windows://xxxx

image

yimelia avatar Jun 21 '19 06:06 yimelia

直接用你本地的python.exe来运行试试,不用IDE跑 从IDE执行的命令行内容里复制出launcher后面的内容,从.air脚本开始一直到命令行结尾,然后把IDE关闭(让你的windows窗口从IDE里释放出来) airtest run xx.air --device windows:///xxx --log xxx

image

所以这一次图里面的报错是连了什么应用程序的错误?这个错误看起来是直接airtest run跑出来的啊。

然后IDE中用本地python跑脚本,是直接跑类似这样的命令行,你也可以直接复制出来在命令行下面跑,效果是一样的,记得用管理员权限启动命令行:

X:\python.exe custom_launcher.py xx.air --device Windows://xxxx

image

image 这个报错的问题是因为我只把IDE关闭了,没有把Airtest.exe终端关闭,如下图,所以没有成功,关掉就好了; image

您说的直接在IDE复制出来在命令行下面跑的方法跟直接执行“airtest run xxx.air...”的效果是一样的,不过前提还是得先关掉IDE才能正常(目前我这边的情况是这样),不过现在影响不大,后面把所有的.air用例脚本写好后关闭IDE批量执行就好。

Wingoc avatar Jun 21 '19 07:06 Wingoc

暂时还不太清楚这个情况是什么原因导致的,你的电脑是win10 64位,然后用了64位的IDE么?是否使用了管理员权限来启动的?

yimelia avatar Jun 21 '19 07:06 yimelia

暂时还不太清楚这个情况是什么原因导致的,你的电脑是win10 64位,然后用了64位的IDE么?是否使用了管理员权限来启动的?

是的, 系统是Win10 64位,python也是64位,IDE是AirtestIDE_2019-05-09_py3_win64; 启动的话,管理与非管理权限都是试过,结果都是一样; 我都打算安装个32位python尝试了,还好现在可以用你说的关闭IDE执行的方法。

Wingoc avatar Jun 21 '19 07:06 Wingoc

import pyautogui pyautogui.FAILSAFE = False pyautogui.PAUSE = 0.1 # 增加延迟(单位:秒)好像这个可以解决

wangweijie7685 avatar Mar 25 '25 02:03 wangweijie7685