pywinauto type_keys() не будет отправлять все ключи

Я занимаюсь автоматизацией Windows, и мне нужно импортировать файл в инструмент с помощью диалогового окна «Открыть». у меня есть этот код

 w_open_handle = pywinauto.findwindows.find_windows(title=u'Open', class_name='#32770')[0]
 w_open = app.window_(handle=w_open_handle)

 # Enter filename in edit box
 w_open['File &name'].type_keys("export.txt")

Когда я запускаю это, я замечаю, что только ключи "rt.txt" отправляются в поле редактирования Имя файла в окне. Я пробовал другие имена вместо «export.txt», но в каждом случае первые несколько ключей не отправляются. Думал, может поможет небольшая задержка между открытием диалога и отправкой ключей, но безрезультатно.

Кто-нибудь может сказать мне, что здесь происходит?

Python 3.4.5 (мне нужна эта версия из-за других зависимостей пакетов)

Windows 10


person kronosjt    schedule 20.03.2019    source источник
comment
Возможно, .set_focus() внутри .type_keys() производит такой эффект. Вместо этого я бы предложил попробовать .set_text("export.txt").   -  person Vasily Ryabov    schedule 20.03.2019
comment
Спасибо Василий. Оказывается, у меня был неправильный идентификатор элемента управления (тот, что для статического текста рядом с фактическим элементом управления). Я нашел правильный, и с ним set_text() отлично работает.   -  person kronosjt    schedule 22.03.2019
comment
Большой. Я разместил это как ответ.   -  person Vasily Ryabov    schedule 24.03.2019


Ответы (2)


Возможные эффекты type_keys():

  • Он вызывает .set_focus() внутрь.
  • Может быть обнаружено неправильное управление (это легко проверить методом .draw_outline()).

Более надежный метод, который устанавливает весь текст, — это .set_text("..."), который доступен только для определенных типов элементов управления.

person Vasily Ryabov    schedule 24.03.2019

попробуй это

from pywinauto import keyboard
keyboard.send_keys("export.txt")
person salah    schedule 20.03.2019
comment
Пожалуйста, объясните свой код - person Nino Filiu; 20.03.2019
comment
кто должен мне объяснять? - person salah; 20.03.2019
comment
Пожалуйста, отредактируйте свой вопрос при включении больших фрагментов кода, иначе он быстро станет нечитаемым. - person Nino Filiu; 20.03.2019
comment
это не мой вопрос, я просто ответил парню, который задал вопрос, и я ответил на ваш комментарий - person salah; 20.03.2019
comment
Я попросил вас отредактировать свой ответ, чтобы включить ваши объяснения (попробуйте это, чтобы ...). Вот как все работает в Stack Overflow, я просто стараюсь изо всех сил, чтобы вы поступали правильно. - person Nino Filiu; 20.03.2019