Как исправить ошибку Pywinauto KeySequence в Python

#python #pywinauto

#python #pywinauto

Вопрос:

Я пытаюсь ввести (Alt клавиша Windows) в скрипт для моего приложения. Я определил type_keys

 def type_keys(string, element):

    """Type a string char by char to Element window"""

    for char in string:

        element.type_keys(char)
  

Затем вызываем ее во время сохранения здесь:

               # Save

              print("Saving")

              type_keys("%{VK_LWIN down}", win)

              #wait_win_ready(win)

              time.sleep(10)

              type_keys("1", win)

              win.wait("enabled", timeout = REFRESH_TIMEOUT)
  

Я получаю ошибку, которая кажется, что мой синтаксис неверен, но не уверен, как исправить.

 Saving

Traceback (most recent call last):

  File "c:python36librunpy.py", line 193, in _run_module_as_main

    "__main__", mod_spec)

  File "c:python36librunpy.py", line 85, in _run_code

    exec(code, run_globals)

  File "C:Python36Scriptspbixrefresher.exe__main__.py", line 9, in <module>

  File "c:python36libsite-packagespbixrefresherpbixrefresher.py", line 67, in main

    type_keys("%{VK_LWIN down}", win)

  File "c:python36libsite-packagespbixrefresherpbixrefresher.py", line 13, in type_keys

    element.type_keys(char)

  File "c:python36libsite-packagespywinautobase_wrapper.py", line 971, in type_keys

    vk_packet)

  File "c:python36libsite-packagespywinautokeyboard.py", line 710, in send_keys

    vk_packet=vk_packet)

  File "c:python36libsite-packagespywinautokeyboard.py", line 621, in parse_keys

    raise KeySequenceError('`}` not found')

pywinauto.keyboard.KeySequenceError: `}` not found
  

Надеюсь на некоторую помощь в объяснении того, почему я получаю эту ошибку! Спасибо за чтение.

Ответ №1:

Это опечатка в этой строке: type_keys("%{VK_LWIN down}", win) которая должна быть element.type_keys("%{VK_LWIN down}")

Проблема в том, что ваша реализация type_keys разворачивает последовательность примерно так:

 element.type_keys("%")
element.type_keys("{") # fails here, absolutely expected!
element.type_keys("V")
element.type_keys("K")
element.type_keys("_")
element.type_keys("L")
element.type_keys("W")
element.type_keys("I")
element.type_keys("N")
element.type_keys(" ") # it won't be typed without param `with_spaces=True` (default is False)
element.type_keys("d")
element.type_keys("o")
element.type_keys("w")
element.type_keys("n")
element.type_keys("}")
  

Комментарии:

1. Большое вам спасибо за ваш комментарий — в вашем ответе — вы предлагаете удалить «, win» из строки type_keys — используя элемент, вы все равно найдете правильное окно приложения (в данном случае файл pbix, который был определен как win?) — Я протестирую и вернусь сюда — еще раз большое вам спасибо.