PyAtom이란?

Mac OS의 Obect를 조작하기 위해서는 Apple Accessibility API를 사용하여야 한다.
PyAtom은 Apple Accessibility API를 사용하여 Mac 응용 프로그램의 GUI객체를 조작해주는 Python Library이다.

Apple Accessibility API

Windows의 UIAutomation Library와 동일하게 Mac의 GUI객체를 조작하기 위한 Library로 Xcode의 툴을 통해서 Inspection을 수행할 수 있다.

설치방법(Python기준)

  1. Xcode 설치
    PyAtom의 스크립트 수행 및 환경설정을 위해서는 Xcode의 특정 Library가 필요하다. 이에 따라 Xcode설치가 필요하다.
    Xcode는 app store를 통해서 설치할 수 있다. 워낙 유명하니 설치 방법은 Link로 대체한다.
  2. Inspector실행
    Xcode실행 -> Open Developer Tool -> Accessibility Inspector실행
    image.png
  • 메뉴 설명
    정보를 표시하는 영역은 Basic, Action, Advanced, Element, Hierarchy로 구분된다.
    image.png
    Basic
    대상의 대표적인 정보를 표시함, Label, Title, Value, Type등
    Actions
    대상 Element에 내장되어있는 Action(버튼 클릭 시 수행되는 동작 등)에 대한 정보가 표시되고, 즉시 실행해볼 수 있다.
    Advanced
    대상 Element의 세부 정보를 볼 수 있고, 앞선 Basic을 통해서 충분히 대상 Element를 특정하지 못한 경우에 해당 정보를 사용한다.
    Element
    Element가 어느 속성(버튼, 창, Text등등)인지를 나타냄
    * Hierarchy
    해당 Element의 부모자식 관계를 Tree구조로 표시해줌, 해당 구조를 활용해서도 Element를 찾을 수 있다.
  • 사용법
    앱 중간의 찾기 아이콘 클릭 후 Inspect하고자 하는 대상을 선택한다.
    image.png
  1. PyAtom 설치
    Terminal창을 실행 후 다음 명령어 수행
    pip3 install atomacos

샘플 스크립트 작성 ※Windows와 동일하게 계산기어플 샘플만들어 보기

  • 계산기 App실행하기
    BundleId값은 검색을 통해서 확인!
    # PyAtom Library import
    import atomacos
    # 계산기 어플을 bundle id를 통해서 실행하
    atomacos.launchAppByBundleId('com.apple.calculator')
  • 실행 후 객체 정보 확인하기
    bundle id를 통해서 실행된 app을 찾고 해당값을 객체화 해서 다음 테스트 자동화 수행에 활용한다.
    # 실행된 계산기 어플 Bundle id를 통해서 찾고 객체화하기
    calculator = atomacos.getAppRefByBundleId('com.apple.calculator')
    # 정상적으로 객체 정보가 반영되었는지 확인
    print(calculator)
  • 실행 후 앱이 수행될때까지 기다리기 위해서 Exception처리
    앱이 수행되지 않을경우 객체내 속성값에 AXTitle등이 표시되지 않는다. 이로인해 해당 값을 사용할때 Exception이 발생하는데 해당 Exception이 발생할 경우 3초를 대기하고 다시 객체에 정보를 반영한다.
    try:
       # 만약 계산기 앱이 정상수행되지 않을 경우 AXTitle 값이 객체에 없게 된다.
       getattr(calculator, 'AXTitle')
    except:
       # 이럴경우 Exception이 발생하는데 발생하면 3초를 대기한 후 다음동작을 수행하도록 한다.
       import time
       time.sleep(3)
       calculator = atomacos.getAppRefByBundleId('com.apple.calculator')
  • Accssibility 권한 부여
    위의 동작(실행 후 객체 정보 확인하기)을 최초로 실행 할 경우 Mac에서 GUI동작 제어 확인 메시지가 표시된다.
    다음과 같이 실행을 수행하는 App에 접근 제어 권한을 부여한다.
    image.png
    만약 해당 메시지가 표시되지 않는다면
    시스템환경설정 -> 보안 및 개인정보 보호 -> 개인정보 텝 클릭
  • 계산기의 1버튼을 Inspector를 통해서 확인하기
    Inspector를 통해서 1버튼을 확인 결과 Label : 1, Title : 1, Role : AXButton
    image.png
  • 계산기의 1버튼클릭 하기
    앞선 단계에서 확인 한 정보를 통해서 다음과 같이 1버튼을 클릭할 수 있다.
    중간에 버튼을 찾고 해당 element에서 수행가능한 Action값을 확인한 결과 Press가 표시된다. 그래서 해당 element에 Press동작을 수행한다.
    # AXRole이 AXButton이고 AXTitle이 1인 값 찾기
    one_button = calculator.findFirstR(AXRole='AXButton', AXTitle='1')
    # 1버튼 속성값 확인하기
    print(one_button.getActions())
    # 1버튼 클릭하기
    one_button.Press()
전체 스크립트 수행결과
![image.png](https://velog.velcdn.com/post-images%2Fchacha%2F2d943210-4011-11ea-8006-63e078094616%2Fimage.png)
 
 자세한 소스는 다음 URL에서 : https://github.com/jjunghyup/PyAtomSample.git
profile
안녕하세요~ :)

0개의 댓글