Xamarin.UITEC 권장 사항

Xamarin.UITEST 소개


이 테스트 프레임워크는 iOS 및 Android 응용 프로그램에서 C#에 설명된 NUnit 테스트 프레임워크를 사용하여 자동 UI 테스트를 수행할 수 있도록 합니다.
Xamarin.iOS 및 Xamarin.안드로이드 프로젝트와 밀접하게 결합하여 Objective-C/Swift 및 자바 로컬 기술된 iOS 및 안드로이드 프로젝트에도 사용할 수 있습니다.
실제로 Xamarin은forms로 만든 프로그램을 사용해 봅시다.

준비물

  • Windows 10(모든 Home, Pro)
  • Visual Studio 2019 (Version 16.7.5)
  • 전제 조건


    Visual Studio를 사용합니다.Forms에서 개발할 수 있는 환경이 있습니다.
  • Android 에뮬레이터를 사용하여 디버깅할 수 있습니다.
  • UITest Xamarin.forms가 있는 항목입니다.

    Xamarin.UITst 프로젝트 제작


    새 프로젝트를 만듭니다.UITTest 크로스오버 플랫폼 테스트 항목 선택

    'SampleUITEST'라는 이름으로 제작하면 다음 프로젝트를 제작한다.

    Windows의 경우 시스템 세부 설정이 환경 변수로 바뀝니다.
    변수: ANDROIDHOME
    값: C:\Program Files(x86)\Android\android-sdk
    Path에서
    %ANDROID_HOME%\tools
    %ANDROID_HOME%\platform-tools
    추가가 필요합니다.

    테스트 대상 설정


    이번에는 안드로이드 시뮬레이터에서 UITEST를 테스트하기 때문에 설정을 바꿔야 한다.
    먼저 AppInitializer 가 있습니다.cs를 편집합니다.
     using System;
     using Xamarin.UITest;
     using Xamarin.UITest.Queries;
     
     namespace SampleUITest
     {
         public class AppInitializer
         {
             public static IApp StartApp(Platform platform)
             {
                 if (platform == Platform.Android)
                 {
                     return ConfigureApp
                               .Android
                               .ApkFile("ここにAPKファイルのパス")
                               .StartApp();
                 }
     
                 return ConfigureApp.iOS.StartApp();
             }
         }
     }
    
    IAPp 인터페이스를 계승하는 안드로이드, iOS 대상은 응용 프로그램에 대한 조작을 제공한다.
    AppInitializer.cs에서는 선택한 Platform에 따라 안드로이드 또는 iOS 객체를 생성하는 클래스입니다.
    상술하다.Release 빌드에서 생성된 APK 파일의 경로는 ApkFile("")에 표시됩니다.

    테스트 설명


    우선 테스트 대상의 응용 프로그램 측은 다음과 같은 입력란을 준비했다.
     <Entry AutomationId="TestEntry" 
            ClearButtonVisibility="WhileEditing" 
            HorizontalOptions="FillAndExpand" 
            VerticalOptions="CenterAndExpand"/>
    

    자동 입력 값을 확인합니다.
    Xamarin.UITETst에서는 AutomationId와 같은 고유한 식별자를 설정하여 화면상의 요소를 식별하고 조작할 수 있습니다.
    위의 소스는 AutomationId=TestEntry로 설정됩니다.
    그럼 시험을 적어서 실행하세요.
    Tests.cs에서 다음 테스트 코드를 기술합니다.
     [Test]
     public void EntryTest()
     {
          app.EnterText(c => c.Marked("TestEntry"), "UITest");
          app.PressEnter();
          Assert.AreEqual("UITest", app.Query(c => c.Marked("TestEntry"))
          .FirstOrDefault().Text);
     }
    
    .EnterText()는 Entry에 지정된 문자열을 입력하는 방법입니다.
    실제적으로 테스트를 해보고 싶다면, 테스트에 성공하고, 시뮬레이션자는 다음과 같이 Entry 문자를 입력합니다.

    또한 AutomationId 외에도 Xamarin 은UITEST에는 다양한 요소 지정 방법이 있습니다.
    예를 들어 Class로 지정한 보기를 지정하는 방법을 소개합니다.
    방금 소스 코드를 (으)로 수정합니다.
     [Test]
      public void EntryTest()
      {
            app.EnterText(c => c.Class("EntryRenderer").Index(0), "UITest");
            app.PressEnter();
            Assert.AreEqual("UITest", app.Query(c => c.Marked("TestEntry"))
    	.FirstOrDefault().Text);
      }
    
    Class 지정을 통해 취득하면 요소가 하나가 아닌 경우도 있기 때문에 상기'인덱스(0)'처럼 몇 번째 요소를 지정해야 한다.
    Xamarin.UITEST는 화면상의 요소의 차원 구조를 이해하는 방법이 있다.
    방금 소스 코드를 (으)로 수정합니다.
     [Test]
      public void EntryTest()
      {
            app.EnterText(c => c.Class("EntryRenderer").Index(0), "UITest");
            app.PressEnter();
            app.Repl();
            Assert.AreEqual("UITest", app.Query(c => c.Marked("TestEntry"))
    	.FirstOrDefault().Text);
      }
    
    이렇게 실행하면 응용 프로그램.Repl()에서 다음과 같이 명령 프롬프트를 엽니다.

    따라서 tree를 입력하고 Enter 키를 누릅니다.
    이렇게 하면 아래의 층 구조를 볼 수 있다.

    []로 묶은 것은 클라스 이름이다.그 외에도 이곳에서 다양한 정보를 볼 수 있어요.
    겸사겸사 앱을 들다.Print.Tree()를 통해 계층 구조를 내보낼 수도 있습니다.
    어때?
    Xamarin.forms로 프로그램을 만들면 가져올 수 있습니다.
    그럼 자동 테스트 생활 잘 하세요!
    마지막으로 제가 실제로 어려움을 겪었을 때의 사례를 소개해 드릴게요.

    Tips

  • SearchBar에 입력하고 싶을 때
  • Class 지정을 통해 SearchView 지정
     app.EnterText(c => c.Class("SearchView"), "Test");
    
  • 데이터 Picker에 입력하려는 경우
  • Invoke를 사용하여 로컬 메서드 호출
     var date = new DateTime(2020, 10, 30);
     app.Query(c => c.Class("DatePicker")
        .Invoke("updateDate", date.Year, date.Month, date.Day));
    

    좋은 웹페이지 즐겨찾기