Projet Ui Automator 2.0 dans Android Studio

Je souhaite créer un projet dans Android Studio. Cependant, je ne veux pas une application Android, juste le projet de test.

Après la dernière version d'UiAutomator , j'essayais de définir une classe d'extension ActivityInstrumentationTestCase2 et de commencer mes tests à partir de là.

  • Comment puis-je configurer plusieurs alarmes dans Android?
  • Le fait de cliquer sur la notification ne commence pas l'activité prévue?
  • Utilisation du SDK Google Drive depuis Android
  • Comment appeler une activité Android depuis PhoneGap
  • Comment puis-je utiliser 'RotateDrawable'?
  • Quel est le signal fatal 6 dans logcat android
  • Cependant, j'ai trouvé une chose: je ne peux pas comprendre comment créer le projet sans en faire une application.

    Les options pour créer un nouveau projet sont les suivantes:

    • Démarrez un nouveau projet Android Studio
    • Ouvrir des projets existants
    • Projets d'importation

    J'ai fait:

    1. Démarrez un nouveau projet, donnez-lui un nom, définissez minSDK et choisissez "Aucune activité"
    2. Ouvrez build.gradle (sous l'application) et ajoutez les dépendances et les informations d'instrumentation mentionnées à la fin de Testing Support Library
    3. Ouvert androidTest sous src et a changé le fichier principal: a changé en ActivityInstrumentationTestCase2, a ajouté setUp et tearDown; Défini RunWith Junit4 (comme indiqué dans Testing Support Library )
    4. Je construis le projet (construire avec succès) – Appuyez sur la flèche verte à côté de la création de la "barre d'action"

    Mes problèmes sont les suivants:

    • Comment puis-je l'installer dans l'appareil?
    • Comment puis-je l'exécuter dans l'appareil?
    • Dois-je faire n'importe quoi dans AndroidManifest?
    • Est-ce que je modifie au bon endroit? Dois-je faire n'importe quoi sous src / main?

    J'apprécierais que les instructions d'installation et de fonctionnement soient à la fois sur la façon de le faire via Android Studio et en utilisant la ligne de commande (si vous ne connaissez qu'une d'entre elles, postez-la de toute façon, s'il vous plaît).

    Remarque: c'est la première fois que j'utilise Android Studio

    Merci d'avance.

    MODIFIER:

    À l'heure actuelle, je peux construire et exécuter, mais il me dit que je n'ai pas de tests à exécuter (test test test). Voici mon classement et mon code.

    Mon build.gradle est comme suit:

    apply plugin: 'com.android.application' android { compileSdkVersion 22 buildToolsVersion "21.1.2" defaultConfig { applicationId "androidexp.com.ceninhas" minSdkVersion 21 targetSdkVersion 22 versionCode 1 versionName "1.0" testInstrumentationRunner="android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } packagingOptions { exclude 'LICENSE.txt' } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile 'com.android.support.test:testing-support-lib:0.1' androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.0.0' } 

    Mon code source (sous src / androidTest / java / package) est:

     @RunWith(AndroidJUnit4.class) public class ApplicationTest extends ActivityInstrumentationTestCase2<Activity> { public final static String ACTIVITY_NAME = "com.calculator.Main"; public final static Class<?> autActivityClass; static { try { autActivityClass = Class.forName(ACTIVITY_NAME); } catch (ClassNotFoundException e) { throw new RuntimeException(e); } } public ApplicationTest(){ super((Class<Activity>)autActivityClass); } @Before public void setUp() throws Exception{ super.setUp(); injectInstrumentation(InstrumentationRegistry.getInstrumentation()); } @After public void tearDown() throws Exception{ super.tearDown(); } @Test public void cenas(){ assertTrue(true); } } 

    Le journal d'exécution de la console était:

     Testing started at 18:06 ... Waiting for device. Target device: lge-nexus_5-08e506c10ddef123 Uploading file local path: C:\Users\Ines\workspace\Ceninhas\app\build\outputs\apk\app-debug.apk remote path: /data/local/tmp/androidexp.com.ceninhas No apk changes detected. Skipping file upload, force stopping package instead. DEVICE SHELL COMMAND: am force-stop androidexp.com.ceninhas Uploading file local path: C:\Users\Ines\workspace\Ceninhas\app\build\outputs\apk\app-debug-androidTest-unaligned.apk remote path: /data/local/tmp/androidexp.com.ceninhas.test No apk changes detected. Skipping file upload, force stopping package instead. DEVICE SHELL COMMAND: am force-stop androidexp.com.ceninhas.test Running tests Test running startedFinish Empty test suite. 

    Qu'est-ce que je fais mal?

  • Comment créer un Spinner Android comme popup?
  • Comment désactiver le bouton Effacer les données dans Application info de la gestion de l'application
  • Comment modifier l'ID de groupe d'un fichier sur un périphérique Android enraciné?
  • Plusieurs rectangles ne dessinant pas de toile
  • Exemple simple sur la façon d'utiliser SwipeRefreshLayout avec ListView
  • MATCH_PARENT si la vue des frères et sœurs est plus grande, WRAP_CONTENT si la vue des frères et sœurs est plus petite
  • 2 Solutions collect form web for “Projet Ui Automator 2.0 dans Android Studio”

    J'utilise également uiautomator 2.0 depuis AndroidStudio. Voici quelques réponses à vos questions.

    Comment puis-je l'installer dans l'appareil? Comment puis-je l'exécuter dans l'appareil?

    Assurez-vous que votre appareil est connecté en utilisant

     adb devices 

    Sinon, vous devez le connecter en utilisant

     adb kill-server adb connect xxx.xxx.xxx.xxx 

    Ensuite, à partir d'AndroidStudio, cliquez avec le bouton droit de la souris sur votre classe de test et cliquez sur "Run YourTestCase".

    Dois-je faire n'importe quoi dans AndroidManifest?

    Je n'ai rien de spécial dans mon manifeste, mais assurez-vous d'ajouter

     android { defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } } 

    Dans votre build.gradle

    Est-ce que je modifie au bon endroit? Dois-je faire n'importe quoi sous src / main?

    Oui, vous éditez au bon endroit. Mais vous pouvez déplacer votre code vers src/main . Pour ce faire, vous devrez changer androidTestCompile pour compile dans votre fichier build.gradle.

    Je n'ai pas encore essayé de tester de la ligne de commande, mais vous pouvez voir les commandes AndroidStudio, peut-être que cela peut vous aider.

    J'espère que cela vous a aidé.

    EDITER 1

    J'utilise ce code

    Build.gradle (projectRoot)

     apply plugin: 'com.android.application' android { compileSdkVersion 22 buildToolsVersion "22.0.0" lintOptions { abortOnError false } packagingOptions { exclude 'NOTICE' exclude 'LICENSE.txt' } defaultConfig { minSdkVersion 19 targetSdkVersion 22 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:22.0.0' compile 'com.android.support.test:testing-support-lib:0.1' compile 'com.android.support.test.uiautomator:uiautomator-v18:2.0.0' compile project(':aiccore') } 

    LoginTestCase (projectRoot /src/main/LoginTestCase.java)

     public class LoginTestCase extends InstrumentationTestCase { protected UiDevice device = null; protected String appName; public LoginTestCase() { this("YourAppName") } public LoginTestCase(String appName) { this.appName = appName; } 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); } 

    Eh bien, en fait, vous ne devriez pas écrire le code de test de cette façon. Gardez simplement votre code sous le dossier src / androidTest et écrivez un code de test comme ceci:

     @RunWith(AndroidJUnit4.class) @SdkSuppress(minSdkVersion = 18) public class ChangeTextBehaviorTest { private static final String BASIC_SAMPLE_PACKAGE = "com.example.android.testing.uiautomator.BasicSample"; private static final int LAUNCH_TIMEOUT = 5000; private static final String STRING_TO_BE_TYPED = "UiAutomator"; private UiDevice mDevice; @Before public void startMainActivityFromHomeScreen() { // Initialize UiDevice instance mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); // Start from the home screen mDevice.pressHome(); // Wait for launcher final String launcherPackage = mDevice.getLauncherPackageName(); assertThat(launcherPackage, notNullValue()); mDevice.wait(Until.hasObject(By.pkg(launcherPackage).depth(0)), LAUNCH_TIMEOUT); // Launch the app Context context = InstrumentationRegistry.getContext(); final Intent intent = context.getPackageManager() .getLaunchIntentForPackage(BASIC_SAMPLE_PACKAGE); // Clear out any previous instances intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); context.startActivity(intent); // Wait for the app to appear mDevice.wait(Until.hasObject(By.pkg(BASIC_SAMPLE_PACKAGE).depth(0)), LAUNCH_TIMEOUT); } @Test public void checkPreconditions() { assertThat(mDevice, notNullValue()); } @Test public void testChangeText_sameActivity() { // Type text and then press the button. mDevice.findObject(By.res(BASIC_SAMPLE_PACKAGE, "editTextUserInput")) .setText(STRING_TO_BE_TYPED); mDevice.findObject(By.res(BASIC_SAMPLE_PACKAGE, "changeTextBt")) .click(); // Verify the test is displayed in the Ui UiObject2 changedText = mDevice .wait(Until.findObject(By.res(BASIC_SAMPLE_PACKAGE, "textToBeChanged")), 500 /* wait 500ms */); assertThat(changedText.getText(), is(equalTo(STRING_TO_BE_TYPED))); } } 

    Pour plus de détails, regardez: UIAutomator Test sample

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.