WinAppDriver로 테스트 자동화: 운영별 테스트 코드

WinAppDriver를 사용하여 Windows 앱의 UI 테스트를 자동화합니다.
환경 구축 순서 및 각 조작의 기술 방법을 이하에 정리한다.

환경


  • Windows 10(개발자 모드 사용)
  • Visual Studio 2019

  • 설치


  • WinAppDriver 설치 프로그램을 다운로드합니다.
    htps : // 기주 b. 코 m / 미 c 로소 ft / 우아 나 pD 리 ゔ ぇ r / 레 ぇ 아세 s
  • WinAppDriver를 설치합니다.
  • Windows 10 개발자 모드를 활성화합니다.
  • WinAppDriver.exe를 실행합니다.
    C:\Program Files (x86)\Windows Application Driver\WinAppDriver.exe

  • 테스트 코드 작성


  • Visual Studio에서 단위 테스트 프로젝트를 만듭니다.
  • Nuget 패키지 관리자에서 "Appium.WebDriver"를 설치합니다.
  • 테스트 코드를 작성한다.
    ※주의: Appium의 버전에 따라 쓰는 방법이 다르다. 인터넷상의 샘플 프로그램의 대부분은 3계이다. Nuget 패키지 매니저로 인스톨 되는 것은 4계이므로, 4계의 쓰는 방법을 하는 것.

  • 테스트 자동화



    작성한 테스트 코드
    htps : // 기주 b. 이 m / ysk - 헤 / ぃ

    Setup



    3계
    var appCapabilities = new DesiredCapabilities();
    appCapabilities.SetCapability("app", @"C:\Ysk\WinAppDriverTest\WinAppDriverTest\bin\Debug\WinAppDriverTest.exe");
    _session = new WindowsDriver<WindowsElement>(new Uri("http://127.0.0.1:4723"), appCapabilities);
    

    4계
    var options = new AppiumOptions();
    options.AddAdditionalCapability("app", @"C:\Ysk\WinAppDriverTest\WinAppDriverTest\bin\Debug\WinAppDriverTest.exe");
    _session = new WindowsDriver<WindowsElement>(new Uri("http://127.0.0.1:4723"), options);
    

    조작별



    왼쪽 클릭



    panel을 왼쪽 클릭하면 배경색이 노란색으로 바뀝니다.


    4계
    var panel = _session.FindElementByAccessibilityId("panel1");
    var actions = new Actions(_session);
    actions.Click(panel);       // panel1をクリック
    actions.Perform();      // 実行するために必要
    

    더블 클릭



    4계
    var panel = _session.FindElementByAccessibilityId("panel1");
    var actions = new Actions(_session);
    actions.DoubleClick(panel);     // panel1をダブルクリック
    actions.Perform();
    

    오른쪽 클릭



    panel을 마우스 오른쪽 버튼으로 클릭하여 컨텍스트 메뉴를 표시합니다.


    4계
    var panel = _session.FindElementByAccessibilityId("panel1");
    var actions = new Actions(_session);
    actions.ContextClick(panel);    // panel1を右クリック
    actions.Perform();
    
    actions.Click(_session.FindElementByName("Clear"));
    actions.Perform();      // コンテキストメニューのClearをクリック
    

    마우스 조작



    panel 위를 클릭하면서 마우스 커서를 이동합니다.


    4계
    var panel = _session.FindElementByAccessibilityId("panel2");
    
    for (int i = 0; i < 10; i++)
    {
        var actions = new Actions(_session);
        actions.MoveToElement(panel, i * 10, i * 10);       // マウスカーソルを移動
        actions.Click();        // クリック
        actions.Perform();
    
        Thread.Sleep(3000);
    }
    

    키 조작



    textBox에 문자열을 입력합니다.


    4계
    var textBox = _session.FindElementByAccessibilityId("textBox1");
    
    var actions = new Actions(_session);
    actions.MoveToElement(textBox);     // textBox1にマウスカーソルを移動
    actions.SendKeys("test");       // キーボードで"test"を入力
    actions.Perform();
    
    Thread.Sleep(3000);
    

    스크린샷



    시작된 화면, 데스크톱 전체의 스크린샷을 찍는다.

    4계
    var form = _session.FindElementByAccessibilityId("Form1");
    
    // 起動するまで待つ
    Thread.Sleep(1000);
    
    var shot = form.GetScreenshot();
    shot.SaveAsFile("form.png", ScreenshotImageFormat.Png);     // スクリーンショットを保存
    
    var options = new AppiumOptions();
    options.AddAdditionalCapability("app", "Root");
    var deskSession = new WindowsDriver<WindowsElement>(new Uri("http://127.0.0.1:4723"), options);
    
    shot = deskSession.GetScreenshot();
    shot.SaveAsFile("desktop.png", ScreenshotImageFormat.Png);     // デスクトップ全体のスクリーンショットを保存
    

    기타



    실행된 앱에 연결



    시작된 화면에 연결합니다.

    4계
    var options = new AppiumOptions();
    options.AddAdditionalCapability("app", "Root");
    var deskSession = new WindowsDriver<WindowsElement>(new Uri("http://127.0.0.1:4723"), options);     // デスクトップセッション
    
    var window = deskSession.FindElementByName("Form1");
    var windowHandle = window.GetAttribute("NativeWindowHandle");
    windowHandle = (int.Parse(windowHandle)).ToString("x"); // Convert to Hex
    
    var winOptions = new AppiumOptions();
    winOptions.AddAdditionalCapability("appTopLevelWindow", windowHandle);
    var session = new WindowsDriver<WindowsElement>(new Uri("http://127.0.0.1:4723"), winOptions);      // Form1のセッション
    
    var panel = session.FindElementByAccessibilityId("panel1");     // panel1
    
    var actions = new Actions(session);
    actions.Click(panel);       // panel1をクリック
    actions.Perform();
    
    Thread.Sleep(3000);
    

    원하는 작업을 자동화하기 위해


  • 키 조작, 마우스 조작을 사용해 실현할 수 없는가 검토한다.
    예 : 창 최소화 : Windows 키 + ↓ 키 (Keys.Meta + Keys.Down)
  • 좋은 웹페이지 즐겨찾기