我正在使用Pywinauto与在浏览器登录会话期间打开的应用程序自动化一些交互步骤。
让我们调用应用程序program.exe。它实际上是一个打开的Chrome扩展程序,并提示您输入密码。
import pywinauto as pwa
from pywinauto import application
from pywinauto import keyboard
app = application.Application()
app = app.Connect(path=r"C:\path\program.exe")
win.Part.Click() #not completely sure why i do this
app['Insert password']['Edit'].send('password')
看来我可以连接到程序,但是当我尝试向程序发送文本时出现错误。当我运行以上代码时,会发生此错误:
AttributeError: Neither GUI element (wrapper) nor wrapper method 'send' were found (typo?)
如果我替换此:
app['Insert password']['Edit'].send('password')
与此:
app['Insert password'].SendKeys.send('password')
我收到此错误:
MatchError: Could not find 'SendKeys' in 'dict_keys(['Insert password for MyName:Static', 'Static', 'Insert password for MyName:Edit', 'Edit', 'OK', 'OKButton', 'Button', 'Button0', 'Button1', 'Button2', 'Cancel', 'CancelButton', 'Insert password for MyName:Static0', 'Insert password for MyName:Static1', 'Insert password for MyName:Static2', 'Insert password for MyName:', 'Static0', 'Static1', 'Static2'])'
答案 0 :(得分:1)
任何控件都没有方法send
。 SendKeys
不是方法,而是模块keyboard
内部的一个函数,因此正确的用法是keyboard.SendKeys('password')
。
但是方法.type_keys('password')
将控件放在焦点上,然后执行与keyboard.SendKeys
相同的操作。如果密码包含空格,则可能需要使用with_spaces=True
。诸如%
之类的特殊符号必须转义为{%}
。此方法功能强大,因为它支持与Alt,Shift,Ctrl等组合使用的热键。请参见the docs about keyboard module。您的案例的用法:
app['Insert password']['Edit'].type_keys('password', with_spaces=True)
.set_edit_text('password')
可能更有用:它不会逐字符键入键,而是将整个原始文本发送到控件(不支持特殊键,仅支持文本)。此方法不需要控件处于焦点。