gaozhao1989 / pyjab

Python implementation for Java application UI automation with Java Access Bridge
GNU General Public License v2.0
49 stars 20 forks source link

我发现一个很奇怪的问题, #42

Closed xinchenll closed 2 years ago

xinchenll commented 2 years ago

在一个窗体上有输入框,按钮有热键("alt","y")

1.输入框 send_text('aaaaa', simulate=False) 使用按钮热键的方式 _press_hold_release_key("alt","y"),正常

2.输入框 send_text('aaaaa', simulate=True) 使用按钮热键的方式 _press_hold_release_key("alt","y"),没有任何反应,就像没有这行代码一样,不会被阻塞。

另外这个窗体这个按键用 element.click(simulate=False)能正常点击,但此后弹出确认的窗体会被阻塞,完全控制不了,Access Bridge Explore 也被卡住,直到手动点击这个确认的窗体消失后才恢复正常

gaozhao1989 commented 2 years ago

Hi @xinchenll

感谢您的反馈。如果您面对的控件支持 jab 的原生 api,即不使用模拟参数 simulate 就可以操作控件,那么我推荐您使用原生 api。模拟参数是为了解决原 jab api在某些 Java 程序中无法正常工作而添加的。

回到您提出的问题,您是在输入文本之后然后再输入组合快捷键的,原生 api 输入文本的方式是直接更改文本框的值,而模拟参数则是会使用键盘事件先擦出所有值,然后再按照字符依次输入您预期的字符,那么当输入的字符(键盘事件)与文本框所支持的组合快捷键短时间同时(系统可能会默认键盘是同时输入这些键盘事件的)输入时时候会在您的本地产生冲突呢?请您手动尝试

xinchenll commented 2 years ago

HI, @gaozhao1989 非常感谢回复,按你的思路,调试了一下,我貌似找到解决方法了。 首先我手动在真实环境上操作,的确是在快速输入文本后马上按快捷键,也是不起作用,但我接着在稍为延迟一下,再次按快捷键,起作用了。于是代码里也按这个思路写就解决了 再次感谢。