我正在使用pywinauto为个人项目自动化第三方应用程序。
面对一个奇怪的问题,其中pywinauto为对话框返回True.Exist存在但该对话框实际上不可见。结果,由于代码返回True,因此对该对话框的进一步操作失败。我相信应用程序已缓存对话框或其他内容。不确定如何处理。

app = Application().connect(path = "D:/myapp/Trader.exe")
existFlag = app.window_(title ="Trader - 23506").Exists(timeout =2)
print existFlag  #Returns True
if(existFlag):
    app.window_(title ="Trader - 23506").Close()  #Fails


这是输出

**True**
Traceback (most recent call last):
  File "myauto.py", line 792, in <module>
    app.window_(title ="Trader - 23506").Close()
  File "C:\Python27\lib\site-packages\pywinauto\application.py", line 357, in __getattribute__
    ctrls = self.__resolve_control(self.criteria)
  File "C:\Python27\lib\site-packages\pywinauto\application.py", line 239, in __resolve_control
    raise e.original_exception
pywinauto.findwindows.ElementNotFoundError: {'process': 12964, 'backend': u'win32', 'title': 'Trader - 23506'}

最佳答案

是的,Win32应用程序可以具有不可见的现有窗口。要检查可见性,可以调用此方法:

visible = app.window(title ="Trader - 23506").is_visible()


否则可能是计时问题(如果在约50%的情况下失败,或者在.exists(...)调用后立即消失了现有窗口)。因此,处理关闭对话框的另一种方法是:

dlg = app.window_(title ="Trader - 23506")
try:
    dlg.wait_not('visible', timeout=2)
except Exception: # or timings.TimeoutError
    dlg.close()

关于python - Pywinauto Windows存在但不可见,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42917915/

10-14 19:01