pywinauto-如何处理警报窗口控件

时间:2018-09-19 06:13:45

标签: python pywinauto

我已经在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 :(得分:0)

您写道您曾经使用过backend="uia",但是代码Application().start()使用了默认的后端"win32"。您必须使用Application(backend="uia").start()选择“ uia”。

注意:对于“ win32”后端,警报窗口是顶级窗口。因此,您需要app.Success.OK.click()才能在其上单击“确定”按钮。对于backend =“ uia”警报窗口将是“ 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()

相关问题