본문 바로가기
IT/파이썬

파이썬 AttributeError: WindowSpecification class has no 'SetFocus' method 에러 대응

by Augus 2018. 3. 30.
반응형

pywinauto.findwindows.ElementNotFoundError: 또는  AttributeError: WindowSpecification class has no 'SetFocus' method 에러 대응


pyWinauto를 이용하여 어플리케이션 프로그램의 자동화를 하고자 하는 경우

해당 커서를 텍스트에디터 항목에 위치시키고자 'SetFocus'를 사용하는 경우 위 에러 메시지가 발생하거나

ElementNotFoundError: 가 나는 경우


거의 2주동안 이방법 저방법 삽질하고 방법을 못찾다가 의외의 곳에서 해결하였다.



"C:\Program Files (x86)\Python36_32\python.exe" "C:/Users/Lee/Documents/02 Lecture_Study/16 Python_Croll/02 Daeshin_stock/Daeshin_DB/01_ver_check_01.py"

#2 <pywinauto.application.WindowSpecification object at 0x0741F9F0>

dlg <pywinauto.application.WindowSpecification object at 0x03BE1E70>

Traceback (most recent call last):

  File "C:\Users\Lee\AppData\Roaming\Python\Python36\site-packages\pywinauto\application.py", line 245, in __resolve_control

    criteria)

  File "C:\Users\Lee\AppData\Roaming\Python\Python36\site-packages\pywinauto\timings.py", line 449, in wait_until_passes

    raise err

pywinauto.timings.TimeoutError


During handling of the above exception, another exception occurred:


Traceback (most recent call last):

  File "C:/Users/Lee/Documents/02 Lecture_Study/16 Python_Croll/02 Daeshin_stock/Daeshin_DB/01_ver_check_01.py", line 40, in <module>

    pass_ctrl.Set_Focus()

  File "C:\Users\Lee\AppData\Roaming\Python\Python36\site-packages\pywinauto\application.py", line 351, in __getattribute__

    ctrls = self.__resolve_control(self.criteria)

  File "C:\Users\Lee\AppData\Roaming\Python\Python36\site-packages\pywinauto\application.py", line 248, in __resolve_control

    raise e.original_exception

  File "C:\Users\Lee\AppData\Roaming\Python\Python36\site-packages\pywinauto\timings.py", line 427, in wait_until_passes

    func_val = func(*args)

  File "C:\Users\Lee\AppData\Roaming\Python\Python36\site-packages\pywinauto\application.py", line 190, in __get_ctrl

    dialog = self.backend.generic_wrapper_class(findwindows.find_element(**criteria[0]))

  File "C:\Users\Lee\AppData\Roaming\Python\Python36\site-packages\pywinauto\findwindows.py", line 87, in find_element

    raise ElementNotFoundError(kwargs)

pywinauto.findwindows.ElementNotFoundError: {'title': 'CREON Starter', 'class_name': '#32770', 'control_id': '0', 'backend': 'win32', 'process': 15180}


Process finished with exit code 1



결국은 set_focus에서 문제가 발생한 것은 아니었다.


app = application.Application()
app.start('C:/CREON/STARTER/coStarter.exe')
title = "CREON Starter"
dlg = timings.WaitUntilPasses(20, 0.5, lambda: app.connect(title=title)).Dialog
pass_ctrl = dlg.Edit2
time.sleep(10)
pass_ctrl.set_focus()
pass_ctrl.type_keys("ID")
cert_ctrl = dlg.Edit3
cert_ctrl.SetFocus()
cert_ctrl.TypeKeys("PWD")
btn_ctrl = dlg.Button0
btn_ctrl.Click()

dlg = timings.WaitUntilPasses(20, 0.5, lambda: app.connect(title=title)).Dialog


이부분의 수정을 통해서 문제 해결


app.window_(title=title)) ==> app.connect(title=title).Dialog

반응형

'IT > 파이썬' 카테고리의 다른 글

파이썬 자동로그인  (2) 2018.05.06
파이썬에서 Timeout Error 처리하기  (2) 2018.05.05
findbestmatch.MatchError: 에러 처리  (1) 2018.05.05
pywinauto 사용시 에러 수정방법  (0) 2018.03.26