【问题标题】:Pywinauto Windows Exists but not VisiblePywinauto Windows 存在但不可见
【发布时间】:2017-03-21 14:01:55
【问题描述】:

我正在使用 pywinauto 为个人项目自动化第三方应用程序。 面临一个奇怪的问题,即 pywinauto 为对话框返回 True。存在但对话框实际上不可见。结果,由于代码返回 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'}

【问题讨论】:

    标签: python ui-automation pywinauto


    【解决方案1】:

    是的,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()
    

    【讨论】:

    • 不是时间问题。但是您的解决方法和 is_visible() 检查有助于解决以下问题: dlg = app.window_(title ="Trader - 23506") try: if (dlg.Exists() and dlg.wait_not('visible', timeout=1)): print("Dialog可能存在但不可见") 除外: print("Dialog Exists and Visible") print(traceback.print_exc())
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    • 2018-09-30
    相关资源
    最近更新 更多