Страницы

Поиск по вопросам

понедельник, 18 февраля 2019 г.

pywinauto-пример из документации модуля не отрабатывает. Поможете?

pywinauto-пример из документации запускает блокнот, открывает меню и - затыкается... Если кому интересно, то без строки закрытия окна app.AboutNotepad.OK.click() текст в блокнот нормально выводится следующим оператором... А то модуль то классный, но если у меня не работает даже их пример использования их модуля, то что то я не понимаю значит... Вот и прошу о помощи) Кстати - на английской раскладке все работает...
# -*- coding: utf-8 -*- from pywinauto.application import Application # Run a target application app = Application().start("notepad.exe") # Select a menu item #app.UntitledNotepad.menu_select("Help->About Notepad") app.UntitledNotepad.menu_select("Довідка->Про програму") # Click on a button app.AboutNotepad.OK.click() # Type a text string app.UntitledNotepad.Edit.type_keys("pywinauto Works!", with_spaces = True)

Ниже привожу начало и конец сообщений из которых следует, что пункта меню "ОК" в словаре не найдено. Как видно в тексте программы - я изменил стандартную англоязычную строку примера - на украинский вариант. Так вот аналогичное сообщение выдавалось с рассказом что "не могут найти Help в словаре" и далее в словаре были указаны украинские названия - "&Довідка"... Надеюсь смог объяснить, что-то ))
Traceback (most recent call last): File "C:\Users\Vasil\AppData\Local\Programs\Python\Python36\lib\site-packages\pywinauto\application.py", line 245, in __resolve_control criteria) File "C:\Users\Vasil\AppData\Local\Programs\Python\Python36\lib\site-packages\pywinauto\timings.py", line 447, in wait_until_passes raise err pywinauto.timings.TimeoutError
During handling of the above exception, another exception occurred:
Traceback (most recent call last): File "F:/PyCodes/WOW/pptx/pywinauto _notepad-example.py", line 9, in app.AboutNotepad.OK.click() File "C:\Users\Vasil\AppData\Local\Programs\Python\Python36\lib\site-packages\pywinauto\application.py", line 351, in __getattribute__ ctrls = self.__resolve_control(self.criteria) File "C:\Users\Vasil\AppData\Local\Programs\Python\Python36\lib\site-packages\pywinauto\application.py", line 248, in __resolve_control raise e.original_exception File "C:\Users\Vasil\AppData\Local\Programs\Python\Python36\lib\site-packages\pywinauto\timings.py", line 425, in wait_until_passes func_val = func(*args) File "C:\Users\Vasil\AppData\Local\Programs\Python\Python36\lib\site-packages\pywinauto\application.py", line 209, in __get_ctrl ctrl = self.backend.generic_wrapper_class(findwindows.find_element(**ctrl_criteria)) File "C:\Users\Vasil\AppData\Local\Programs\Python\Python36\lib\site-packages\pywinauto\findwindows.py", line 84, in find_element elements = find_elements(**kwargs) File "C:\Users\Vasil\AppData\Local\Programs\Python\Python36\lib\site-packages\pywinauto\findwindows.py", line 300, in find_elements elements = findbestmatch.find_best_control_matches(best_match, wrapped_elems) File "C:\Users\Vasil\AppData\Local\Programs\Python\Python36\lib\site-packages\pywinauto\findbestmatch.py", line 533, in find_best_control_matches raise MatchError(items = name_control_map.keys(), tofind = search_text) pywinauto.findbestmatch.MatchError: Could not find 'OK' in 'dict_keys(['', 'Edit'])' >>>


Ответ

Дело в кириллизации! Вот работающий в украинской раскладке код. Под русскую подправите сами, глядя на названия меню в "Блокноте".
# -*- coding: utf-8 -*- from pywinauto.application import Application # Run a target application app = Application().start("notepad.exe") # Select a menu item #app.UntitledNotepad.menu_select("Help->About Notepad") app.UntitledNotepad.menu_select("Довідка->Про програму") # Click on a button #app.AboutNotepad.OK.click() app.Пропрограмублокнот.ОК.click() # Type a text string app.UntitledNotepad.Edit.type_keys("pywinauto Works!", with_spaces = True)
Да, вместо app.AboutNotepad.OK.click() надо написать
app.Пропрограмублокнот.ОК.click()
Причем ОК - тоже надо набрать кириллицей. И - все работает. Мое мнение - ребята перестарались с дружественностью кодирования. Если мне надо писать для разных раскладок мне нужно три кода (три модуля). А используя модуль win32com мне нужно выбирать литералы в словаре. Так что я свой выбор остановил на "не дружественном" но практичном win32com

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

Отправить комментарий