Более быстрый способ проверить, закрыт ли диалог?

Я автоматизирую приложение (pywinauto ver 0.6.2), в котором я:

  • поиск записи
  • открыть диалог
  • вносить изменения
  • нажмите кнопку ОК
  • дождитесь закрытия диалога
  • при закрытии искать следующую запись, повторять

На этапе «дождитесь закрытия диалога» я использую:

dlg.wait_not("visible", timeout=60)

Это работает в большинстве случаев, но иногда не только не обнаруживает, что диалоговое окно закрылось, но и ничего не делает на отметке 60 секунд.

Есть ли лучший способ определить закрытие окна?


person MidnightThoughtful    schedule 12.04.2017    source источник
comment
Как часто он воспроизводится? Окно действительно закрыто, но wait_not все еще работает?   -  person Vasily Ryabov    schedule 13.04.2017
comment
У меня пока нет точных статистических данных, но я могу попытаться их собрать. Вчера я провел 10 транзакций, и он не обнаружил закрытия диалога 7-го числа - диалог был закрыт, но код сидел, как будто ждал. Затем я вышел из приложения, повторно запустил его с еще 11 транзакциями, и оно заработало без проблем. Трудно предсказать, когда это произойдет.   -  person MidnightThoughtful    schedule 13.04.2017
comment
Хм... Интересно. Какой бэкенд вы используете? "win32" или "uia"?   -  person Vasily Ryabov    schedule 13.04.2017
comment
Этот код был написан для версии 0.5.4 — я только недавно обновился до 0.6.2 (примечание: я видел ту же проблему с 0.5.4; чтобы обойти ее, я написал уродливый цикл for, который тестировал и перехватывал исключения). Если я не указываю серверную часть, по умолчанию используется win32?   -  person MidnightThoughtful    schedule 15.04.2017
comment
Да, "win32" — это серверная часть по умолчанию. У меня были планы переписать wait/wait_not методы, которые исправят пару других проблем и несоответствий, таких как это. Но я слишком занят на некоторое время вперед (pywinauto пока является хобби-проектом). Вероятно, летнее обновление (0.6.3 или 0.6.4) будет содержать исправление. Если у вас есть время покопаться в этом, вы всегда можете сделать запрос на вытягивание. ;) И спасибо, что сообщили об этом!   -  person Vasily Ryabov    schedule 15.04.2017
comment
Один из первых шагов, если это поможет.   -  person Vasily Ryabov    schedule 15.04.2017
comment
Вы имеете в виду обертывание dlg.wait('visible', timeout=1) в какой-то цикл for?   -  person MidnightThoughtful    schedule 20.04.2017
comment
Неа. Ничего, внутренняя структура метода мне не нравится. Постараюсь найти время переделать.   -  person Vasily Ryabov    schedule 20.04.2017
comment
Проблема исправлена ​​в этой ветке. Мы планируем выпустить его в мае.   -  person Vasily Ryabov    schedule 26.04.2017


Ответы (1)


Ошибка с таймингами исправлена ​​в pywinauto 0.6.3. Пожалуйста, обновите его с помощью pip install -U pywinauto. Метод wait_not также затронут.

person Vasily Ryabov    schedule 07.07.2017