Ошибка при попытке отправить текст в приложение с помощью Pywinauto: AttributeError - PullRequest
0 голосов
/ 15 января 2019

Я использую 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 голосов
/ 21 января 2019
  • Не существует метода send ни для одного из элементов управления. SendKeys это не метод, а функция внутри модуля keyboard, поэтому правильное использование keyboard.SendKeys('password').

  • Но метод .type_keys('password') фокусирует элемент управления, а затем делает то же, что и keyboard.SendKeys. Возможно, вам придется использовать with_spaces=True, если пароль содержит пробелы. Специальные символы, такие как %, должны быть экранированы так: {%}. Этот метод является мощным, потому что он поддерживает комбинации горячих клавиш с Alt, Shift, Ctrl и т. Д. См. документы о модуле клавиатуры . Использование для вашего случая:

    app['Insert password']['Edit'].type_keys('password', with_spaces=True)


  • Метод .set_edit_text('password') может быть еще более полезным: он не печатает ключи char за char, но отправляет весь необработанный текст в элемент управления (без поддержки специальных клавиш, только текст). Этот метод не требует, чтобы элемент управления был в фокусе.
...