我刚刚开始学习python。现在我的工作是尝试使用pywinauto进行一些自动测试。有时我可以通过ParentDlg.child_window(**criterion)
来获得一个对话框,有时却不能。
您可以认为我的应用程序(PageManager.exe)有两个按钮,[Page1]按钮和[Page2]按钮。启动应用程序时,您可以单击按钮以启动Page.exe进程。这意味着同时有两个Page.exe。启动Page.exe时,它将启动ImageCalculate.exe。所以有两个ImageCalculate.exe两个。 ImageCalculate.exe的父对话框是Page.exe。
单击[Page1]按钮时,将显示Page.exe(用于Page1),并隐藏Page.exe(用于Page2)。当您单击[Page2]按钮时,将显示Page.exe(用于Page2)并隐藏Page.exe(用于Page1)。
我的问题是当显示一个Page.exe时,例如Page.exe(用于Page1)。我可以通过ParentDlg = Desktop(backend="uia").window(best_match="Page1")
找到Page.exe的主对话框。之后,我使用psutil.pids()
和进程名"ImageCalculate.exe"
来获取ImageCalculate.exe的两个PID,例如,一个是1234,另一个是5678。请注意,两个ImageCalculate.exe具有几乎相同的属性,相同的标题,班级名称等。
最后,我尝试通过ParentDlg.child_window(**criterion)
来获取ImageCalculate.exe的主对话框。
但是根据我的测试,有时我可以获取主对话框并继续操作其控件,有时则不能。我不知道为什么,希望有人可以帮助我或提供其他方式来获取ImageCalculate.exe的主对话框。因为我具有ImageCalculate.exe的PID,也许我可以通过PID获得流程的主对话框?然后,也许我可以检查该对话框是否显示,或者不确认该对话框属于哪个Page.exe(如果显示此对话框,我认为该对话框属于Page1的Page.exe的ImageCalculate.exe)。
ParentDlg = Desktop(backend="uia").window(best_match="Page1")
// pids contains two pid of ImageCalculate.exe
for pid in pids:
try:
criterion = {}
criterion['class_name_re'] = "AfxFrameOrView*"
criterion['process']=pid
ImageCalculate_dialog = parent.child_window(**criterion)
# I think if ImageCalculate_dialog.writable_props is successful.
# Page1’s Page.exe’s ImageCalculate.exe's main dialog is found.
# But some times ImageCalculate_dialog.writable_props is failed two times and throws ElementNotFoundError
_cname = ImageCalculate_dialog.writable_props
except pywinauto.findwindows.ElementNotFoundError:
continue
else:
return ImageCalculate_dialog
# Now I am trying to use following codes to get main dialog
ImageCalculateApp = Application().connect(process=pid)
dialogs = ImageCalculateApp.windows()
for dialog in dialogs:
print(dialog)
# When I check print result in console
# I can find "hwndwrapper.DialogWrapper - 'ImageCalculate - Untitled',Afx:00400000:b:00010003:00000006:003908A5"
# But I don't know how to use hwndwrapper.DialogWrapper object,
# who could tell me how to use this object or give me some documents about this object?