尝试使用Pywinauto将文本发送到应用程序时出错:AttributeError

时间:2019-01-15 12:47:24

标签: python-3.x pywinauto

我正在使用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'])'

1 个答案:

答案 0 :(得分:1)

  • 任何控件都没有方法sendSendKeys不是方法,而是模块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')可能更有用:它不会逐字符键入键,而是将整个原始文本发送到控件(不支持特殊键,仅支持文本)。此方法不需要控件处于焦点。