2017-03-21 1 views
1

저는 pywinauto를 사용하는 개인 프로젝트 용 타사 응용 프로그램을 자동화하고 있습니다. pywinauto가 대화 상자에 대해 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 

다음은 Win32 응용 프로그램이 표시되지 않습니다 기존 창을 가질 수, 출력

**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

예입니다.

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") 시도 : \t if (dlg.Exists() 및 dlg.wait_not '볼', 제한 시간 = 1)) : \t \t 인쇄 ("대화가있을 수 있지만 볼 수 없습니다") 제외 : \t 인쇄 ("대화 상자가 존재 해 보이는") \t 인쇄 (traceback.print_exc()) –

관련 문제