스크립트 작성하기에서는

이번편에서는 Python-UIAutomation-for-Windows의 library에서 필요할 만한 기능을 설명한다

테스트 시나리오

이번편 부터는 자동화 테스트 시나리오를 작성하고 그 시나리오에 맞춰서 스크립트를 작성해본다.
추후에 디테일하게 개인적으로 생각하는 자동화 테스트 시나리오에 필요한 요소를 따로 설명할 예정이다
이번편에서는 간단하게 테스트데이터, Step, 기대결과요렇게만 활용할 예정이다

샘플 시나리오 : GIT GUI툴을 통해서 Clone받기

간단하게 뚝딱 뚝딱 완성
image.png

Script작성

  1. Script파일 생성
    이제부터는 수행 시 pytest를 활용할 예정이다
    그래서 파일이름을 gitguit_test.py로 파일이름에 python test코드는 파일 이름에 test를 입력한다
    파일에 테스트 수행 용 function을 만들고, assert Fail구문을 입력
    image.png
  2. 실행해보기
    python파일을 만들면 기본적으로 python으로 실행되서 assert문이 동작하지 않음, pytest로 수행하기 위해서는. function이름에서 마우스 우클릭 → GO TO → Test 클릭
    이후 Function왼쪽의 Run Icon클릭
    image.png
    실행결과
    image.png
  3. 스크립트에 시나리오 내용을 주석으로 표시
    image.png
  4. 스크립트 작성 시작!
  • Clone 대상 폴더 존재여부 확인
    python에서 폴더 존재 확인은 os를 통해서 수행한다
    일일이 GUI로 확인해도되지만 절차가 많아져서 이걸로 수행
      # Clone폴더 값 정의
      clone_folder = "C:\\dev\\git\\UIAutomationExample"
      # Clone 대상 폴더가 존재할 경우 폴더를 지운다.
      import os
      if os.path.exists(clone_folder):
          os.system('rmdir /S /Q "{}"'.format(clone_folder))
          
      # Clone 대상 폴더가 없는지 확인한다.
      if os.path.exists(clone_folder):
          assert False, "clone대상폴더가 지워지지 않음"
  • GIT GUI실행시키기
    inpect.exe를 통해서 검색 영역의 속성을 확인하기
    왼쪽의 Tree를 보면 검색영역은 3depth인걸 확인할 수 있고, 이후 오른쪽의 세부 속성을 보면 Button속성의 Name값이 검색하려면 여기에 입력하십시오.인 걸 확인할 수 있다.
    image.png
    위의 값을 통해 검색 버튼을 클릭하는 스크립트를 다음과 같이 작성할 수 있다.
    import uiautomation as auto
    auto.ButtonControl(searchDepth=3, Name='검색하려면 여기에 입력하십시오.').Click()
    gui입력 후 파일 실행 아이콘을 inspect로 확인하면 왼쪽의 tree에는 나타나지 않는것을 확인 할 수 있다. 이럴때는 depth속성을 좀 많이 주면 element가 찾아지는 경우가 있다.
    auto.TextControl(searchDepth=10, Name="Git GUI").Click()
    image.png
    GIT GUI수행 후 확인까지 스크립트
    import uiautomation as auto
    # 검색영역 클릭하기
    auto.ButtonControl(searchDepth=3, Name='검색하려면 여기에 입력하십시오.').Click()
    # 검색영역에 값 입력하기
    auto.EditControl(searchDepth=3, Name='검색 상자').SendKeys('git gui')
    # Git GUI아이콘 클릭하기
    auto.TextControl(searchDepth=10, Name="Git GUI").Click()
    # Git GUI가 정상적으로 수행되었는지 확인
    auto.WindowControl(searchDepth=1,  Name="Git Gui")
  • Clone repository 수행하기
    원래 계획은 창안의 Clone Existing Repository을 크릭하려고 하였으나 해당 객체는 inpect가 되지 않고 바로 상위의 객체만 조작이 됨. 이런 경우 해당 객체를 클릭할 수 없어서 계획을 수정해서 상단의 메뉴를 통해서 clone을 수행한다
    image.png
    메뉴를 통한 clone기능 수행 스크립트
    # 상단 메뉴를 통해 Clone을 수행
    auto.MenuItemControl(searchDepth=8,  Name="Repository").Click()
    auto.MenuItemControl(searchDepth=8, Name="Repository")
    # inspect를 통해서 menu의 AutomationId가 48이므로 이를 활용
    auto.MenuItemControl(AutomationId = "48").Click()
     # 아쉽게도 해당 APP은 "Clone Existing Repository"에 대한 정보를 확인할 수 없는 앱이어서
      # 이후 동작으로 확인할 수 밖에 없다.
    앞선 스크립트에서 정상적으로 글씨가 있는지 확인 하고 싶었으나 inspect결과에서 보면 해당 화면의 값을 확인 할 수 있는 속성이 없고,
    화면안의 모든 객체는 단순히 ClassNameTkChild인 것만 확인 가능하다. 이럴때는 TkChild인 ClassName의 Index로만 객체를 조작 할 수 있다.
    아쉽게도 inspect.exe에서는 Index번호까지는 제대로 알수 없어서
    Autoit의 au3info.exe를 통해서 index번호를 확인한다.
    확인결과 Target Directory의 Index는 11인것을 확인할 수 있다 이렇게 확인 된 정보로 이후 동작을 작성한다.
    image.png
    # Source location 및 Target Directory 값 정의
    source_location = "https://github.com/jjunghyup/UIAutomationExample.git"
    target_directory = "C:\\dev\\git\\UIAutomationExample"
    # Source Location값과 Target Directory값을 입력한다.
    auto.PaneControl(ClassName="TkChild", foundIndex=14).Click()
    auto.PaneControl(ClassName="TkChild", foundIndex=14).SendKeys(source_location)
    auto.PaneControl(ClassName="TkChild", foundIndex=11).Click()
    auto.PaneControl(ClassName="TkChild", foundIndex=11).SendKeys(target_directory)
    # 값이 정상적으로 입력된다.
    # 값을 Clipboard에 복사하고 붙여넣기 식으로 확인이 가능하지만 해당 내용은 이후에 작성 예정

    # Clone 버튼을 클릭한다.
    auto.PaneControl(ClassName="TkChild", foundIndex=18).Click()
    # Clone 대상폴더가 존재하는지 확인한다. 10초 동안 확인한다.
    result = False
    for i in range(0, 10):
        if os.path.exists(clone_folder):
           result = True

    assert result, "clone대상폴더가 존재 하지 않음"

스크립트 url : https://github.com/jjunghyup/UIAutomationExample/blob/master/gitgui_test.py

profile
안녕하세요~ :)

2개의 댓글

comment-user-thumbnail
2022년 10월 4일

안녕하세요, 좋은 글 감사합니다.
혹시 Window 프로그램에서 특정 버튼을 선택하기 위해 inspect.exe로 확인해보니 Name = ""로 되어있다면, 해당 버튼을 찾을 수 있는 방법이 있을까요? AutomationId 같은 값으로 확인할 수 있나 시도해봤는데 동작하지 않더라구요 ㅠㅠ

1개의 답글