초기버전 windows의 GUI객체 컨트롤은 Autoit으로 모두 조작이 가능하였다, 하지만 Windows버전이 올라감에 따라 새로운 UI요소를 그릴 수 있는 Library가 공개되었고 그 것이 .Net Framework임, 현재 사용중인 대부분의 창은 .Net Framework 3.0이후의 버전을 사용해서 그려지고 있다.
이에 따라 Microsoft에서는 .Net Framework의 GUI객체 컨트롤을 위해서 UIAutomation API를 공개하였고, 이번에 소개할 Python-UIAutomation-for-Windows는 UIAutomation API를 Python에서 사용할 수 있도록 하게 해주는 Library이다
현재 대부분의 RPA(Robotic Process Automation)툴 특히 Windows기반의 툴들은 UIAutomation API를 기반으로 만들어져있다
Python에서 UIAutomation API를 사용할 수 있게 해주는 Python-UIAutomation-for-Windows의 사용법을 소개한다
Build 221
pywin32-221.win-amd64-py3.6.exe
파일 다운로드Scripts
폴더로 이동 후 python pywin32_postinstall.py -install
명령어 수행pip install uiautomation
계산기
어플 샘플만들어 보기import subprocess
subprocess.Popen('calc.exe')
계산기
창 이하에 "1" 단추
이고 이 단추는 오른쪽 텝에 관련된 속성값을 가진 Element로 볼 수 있다계산기
의 숫자1
번 버튼 클릭하기import uiautomation as auto
* 계산기 창을 조작하기 위해서 계산기 창을 찾고 해당 객체값을 반환
calculator = auto.WindowControl(searchDepth=1, Name='계산기')
위의 값중 searchDepth값이 중요한데...0 depth
는 Desktop윈도우의 객체 영역으로 우리가 잘 알고 있는 시작메뉴 Bar같은 영역이고1 depth
는 Desktop윈도우 위에 떠있는 창
우리가 실행 시킨 프로그램의 창
영역n depth
inspect.exe를 실행한 후 Tree구조상에 하위 레벨을 확인하여 어디까지 검색할 지 범위를 지정한다```
if not calculator.Exists(3, 1):
print('Can not find Calculator window')
exit(0)
```
* calculator의 `1번`버튼을 클릭
앞선 객체 정보에서 보면 `1번`버튼은 다음과 같은 속성을 가지고 있다
1
이라고 표시된 것이 중요하다 ```
calculator.ButtonControl(Name="1").Click()
```
수행결과
안녕하세요. 좋은 정보 공유해주셔서 감사합니다. 자동화 테스트 쪽에 준비하고 있는데 도움이 많이 됩니다.
공유해주신대로 따라해보았는데. python에서 ModuleNotFoundError: No module named 'uiautomaiton' Error 가 출력되는데 Search를 해보아도 해결 방법이 나와있지 않아 이렇게 댓글로 해결 방법이 있는지 문의 드립니다.