Страницы

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

четверг, 9 января 2020 г.

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

#python #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'])'
>>> 

    


Ответы

Ответ 1



Дело в кириллизации! Вот работающий в украинской раскладке код. Под русскую подправите сами, глядя на названия меню в "Блокноте". # -*- 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.

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

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