pywinauto - 如何处理警报 window 控件

pywinauto -how to handle alert window control

我已经在 VB 完成了表格。我无法访问 child window 控件。例如,单击提交按钮后出现警告框。这是我的代码:

# 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()

成功是childwindow的名字。

您写到您使用了 backend="uia",但代码 Application().start() 使用默认后端 "win32"。您必须使用 Application(backend="uia").start() 选择 "uia"。

注意:对于 "win32" 后端,警报 window 是 top-level window。所以你需要 app.Success.OK.click() 来点击确定按钮。对于后端="uia" 警报 window 将是 child of "Form1".

编辑:此代码应该有效:

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().