2017-03-21 29 views
1

我使用pywinauto爲個人項目自動化第三方應用程序。 面對一個奇怪的問題,pywinauto在dialog.Exist中返回True,但對話框實際上並不可見。因此,由於代碼返回True,對話框的進一步操作將失敗。我相信應用程序緩存了對話框或其他東西。不知道如何處理這個。Pywinauto Windows存在但不可見

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'} 

回答

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() 
+0

不是時間問題。但是,您的解決方法和is_visible()檢查有助於解決此類問題: dlg = app.window_(title =「Trader-23506」) try: \t if(dlg.Exists()and dlg.wait_not '可見的',超時= 1)): \t \t打印( 「對話框可能存在,但不可見」) 除外: \t打印( 「對話已存在和可見」) \t打印(traceback.print_exc()) –

相關問題