ошибка запуска пакетного файла pywinauto

Я биолог и новичок в pywinauto, я написал код для открытия входного файла в приложении HYPHY с помощью pywinauto, когда я запускаю свой код построчно в командной строке, он работает нормально, но когда я запускаю код как пакетный файл, он дает следующая ошибка.

Traceback (most recent call last):
File "C:\Users\Masyh\Desktop\autowin_test.py", line 8, in <module>
w_handle = pywinauto.findwindows.find_windows(title=u' Please select a batch file to run:',   class_name='#32770')[0]
IndexError: list index out of range

код:

import pywinauto

pwa_app = pywinauto.application.Application()
w_handle = pywinauto.findwindows.find_windows(title=u'HYPHY Console', class_name='HYPHY')[0]
window = pwa_app.window_(handle=w_handle)
window.SetFocus()
window.MenuItem(u'&File->&Open->Open &Batch File\tCtrl+O').Click()
w_handle = pywinauto.findwindows.find_windows(title=u' Please select a batch file to run:',        class_name='#32770')[0]
window = pwa_app.window_(handle=w_handle)
window.SetFocus()

ctrl = window['Edit']
ctrl.Click()
ctrl.TypeKeys('brown.nuc')
ctrl=window['&open']
ctrl.Click()

я предполагаю, что проблема в том, что окно, которое получает ввод (# 'пожалуйста, выберите меню пакетного файла'), не открыто в начале, и первая часть кода открывает его, но python ищет его с самого начала и не может его найти . Я очень ценю любые предложения, как решить эту проблему.


person user3015703    schedule 30.04.2014    source источник


Ответы (1)


Похоже, что окно не существует, когда выполняется проверка. Вы должны подождать некоторое время, пока окно не откроется. попробуйте следующую конструкцию:

a_check = lambda: pywinauto.findwindows.find_windows(title=u' Please select a batch file to run:',        class_name='#32770')[0]
try:
    w_handle = pywinauto.timings.WaitUntilPasses(timeout=10, retry_interval=1, a_check)
except:
    print('Something went wrong')

Кроме того, ваша проблема может быть вызвана тем, что окно имеет дополнительные атрибуты/состояние. Например, незримый. Используйте разрешенные аргументы из find_windows для обработки таких случаев, здесь список аргументов со значениями по умолчанию:

pywinauto.findwindows.find_windows(class_name=None,class_name_re=None, parent=None, process=None, title=None, title_re=None, top_level_only=True, visible_only=True, enabled_only=False, best_match=None, handle=None, ctrl_index=None, predicate_func=None, active_only=False, control_id=None)
person SWAPYAutomation    schedule 04.05.2014