Android Studioを使ってUI Automator自動化テストを実行します.

5170 ワード

要約
最近インターネットでUAutomator 2.0のバージョンを見ましたが、使うフレームは全部変わったようですので、今日は暇を見つけて試してみました.
We’re please ed to announce the release of UICAutomator 2.0!This version is a significant udate from the previous release.Most importly、UI Automators is now based on Android Instrumenation and you can build and run tests with the'.gradlew connectedCheck command mand.mand.command mand.
大体の意味はUAutomart 2.0に基づいた枠組みがandroidのinstrument ationの枠組みに変わったということです.そして、gradleで配置することができます.実際には、UiAutomatorの枠組みをなぜinstructionに変えたのかはよく分かりませんが、とりあえず、大体の問題を答える環境を試してみましょう.
私たちはAndroid Studioを通してUiAutomatorの配置を試してみましょう.
UiAutomart 2.0のjarカバンは以前のSDK/plotforms/android-19/下ではありません.今はこうします.
  • は、Android SDK ManagerのAndroid Support Repository項により
  • をインストールします.
  • ダウンロードされたjarパッケージのパスは/extras/android/m 2 repository
  • です.
  • 新規Androidプロジェクトを作成し、簡単なアプリケーション
  • を作成します.
  • .build.gradleに依存項目を設定します.
    dependencies {
      androidTestCompile 'com.android.support.test:runner:0.3'
      // Set this dependency to use JUnit 4 rules
      androidTestCompile 'com.android.support.test:rules:0.3'
      // Set this dependency to build and run Espresso tests
      androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2'
      // Set this dependency to build and run UI Automator tests
      androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.1'
    }
    はAndroid Junnit RunnerをデフォルトとしたtestInstructionation Runner
    android {
        defaultConfig {
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
    }
    を設置して、あなた自身のテストコードを作成します.android Testディレクトリの下に試験クラス
  • を新規作成します.
    /**
     * Created by cvtpc on 2015/9/14.
     */
    public class LoginTest extends InstrumentationTestCase {
    
        protected UiDevice device = null;
        protected String appName = "magicCard";
    
        public void runApp(String appName) throws UiObjectNotFoundException, RemoteException {
            device = UiDevice.getInstance(getInstrumentation());
            device.pressHome();
            device.waitForWindowUpdate("", 2000);
    
            UiObject2 allAppsButton = device.findObject(By.desc("Apps"));
            allAppsButton.click();
            device.waitForWindowUpdate("", 2000);
    
            UiScrollable appViews = new UiScrollable(new UiSelector().scrollable(true));
            appViews.setAsHorizontalList();
    
            UiObject settingsApp = appViews.getChildByText(new UiSelector().className(TextView.class.getName()), appName);
            settingsApp.clickAndWaitForNewWindow();
    
            assertTrue("Unable to detect app", settingsApp != null);
        }
    
        @Override
        public void setUp() throws RemoteException, UiObjectNotFoundException {
            this.runApp(appName);
        }
    
        @Override
        public void tearDown() throws RemoteException, UiObjectNotFoundException {
            //Empty for the moment
        }
    
        public void testUS1() {
            UiObject2 usernameLabel = device.findObject(By.clazz(TextView.class.getName()).text("Username"));
            assertTrue("Username label not found", usernameLabel != null);
        }
    }
    Instruumentベースの便利さは、remote debugを必要としないようにデバッグすることです.そしてパラメータ化なども便利になりました.