pywinauto - как управлять окном оповещения - PullRequest
0 голосов
/ 19 сентября 2018

Я сделал свою форму в VB.Я не могу получить доступ к элементам управления дочернего окна.Например, окно предупреждения появляется после нажатия кнопки отправки.Вот мой код:

# used backend="uia"

import sys
import pyautogui
from pywinauto.application import Application
import time
print("test")
app=Application().start()
app.Form1.Edit4.type_keys("go")
app.Form1.Edit3.type_keys("12")
app.Form1.Male.click()
app.Form1.ComboBox.type_keys("in")
app.Form1.Edit2.type_keys("33")
app.Form1.Submit.click()
app.Form1.Submit.print_control_identifiers()
app.Success.print_control_identifiers()
app.Form1.Success.click()

Успех - это имя дочернего окна.

1 Ответ

0 голосов
/ 19 сентября 2018

вы пишете, что использовали backend="uia", но код Application().start() использует бэкэнд по умолчанию, который "win32".Вы должны использовать Application(backend="uia").start(), чтобы выбрать «uia».

Примечание: для бэкенда «win32» окно оповещения является окном верхнего уровня.Таким образом, вам нужно app.Success.OK.click(), чтобы нажать кнопку ОК на нем.Для backend = "uia" окно предупреждения будет дочерним по отношению к "Form1".

EDIT: этот код должен работать:

app.Form1.Success.OKButton.click() # alias of .invoke();
# see IsInvokePatternSupported == True in Inspect.exe

# or
app.Form1.Success.OKButton.click_input() # real click

EDIT2: Это может быть проблема синхронизации.У pywinauto есть тайм-аут по умолчанию 5 секунд, ожидающий появления диалога.Если диалог появляется более чем через 5 секунд, вам нужно что-то вроде этого: app.Form1.Success.wait('visible', timeout=20).

Другая возможная проблема - это поведение блокировки app.Form1.Submit.click(), которое вызывает InvokePattern.Иногда реализация этого шаблона ожидает закрытия диалога (хотя это проблема приложения).Возможно, вам придется изменить это на app.Form1.Submit.click_input().

...