web-dev-qa-db-fra.com

Comment puis-je transmettre des paramètres à une fonction de test lancée à l'aide de la commande adb Shell am Instrumentation

Je développe sous Android, j'utilise une instrumentation pour tester l'application du téléphone. Instrumentation est Android env pour tester les applications. 

J'utilise pour cela la commande avec le nom du scénario de test. Je lance adb, puis j'entre adb Shell, puis j'écris dans Shell la commande am. 

Je souhaite livrer un paramètre avec cette commande am. Je veux dire que je souhaite transmettre les paramètres au test lancé par la commande am. 

Est-ce possible ??? S'il vous plaît aider?

24
ilana

vous pouvez passer un uri de données, un type mime et même des "extras" à la commande am .

am [début | instrument]

am start [-a <action>] [-d <donnée_uri>]
[-t <type_mime>] [-c <catégorie> [-c <catégorie>] ...]
[-e <extra_key> <extra_value>
[-e <extra_key> <extra_value> ...]
[-n <composant>] [-D] [<uri>] 

suis l'instrument [-e <nom_argument> <valeur_argument>] [-p <fichier_profil>] [-w] <composant>

Vous pouvez les transmettre en tant qu '"extras" puis obtenir les extras qui lui sont transmis.

Vous les passeriez comme ceci:

am start -a Android.intent.action.VIEW -c Android.intent.category.DEFAULT 
  -e foo bar -e bert ernie -n my.package.component.blah

puis dans votre code:

Bundle extras = this.getIntent ( ).getExtras ( );

if ( extras != null ) {
  if ( extras.containsKey ( "foo" ) ) {
    Log.d ( "FOO", extras.getString ( "foo" ) );
  } else {
    Log.d ( "FOO", "no foo here" );
  }

  if ( extras.containsKey ( "bert" ) ) {
    Log.d ( "BERT", extras.getString ( "bert" ) );
  } else {
    Log.d ( "BERT", "Bert is all alone" );
  }
} else {
  this.setTitle ( "no extras found" );
}
49
Ryan Conrad

Transmettez le paramètre dans: (par exemple, -e peerID SCH-I545)

adb -s 0915f98870e60701 Shell am instrument -w -e class      /
com.example.Android.testing.uiautomator.BasicSample.sendInvite /
-e peerID SCH-I545 /
com.example.Android.testing.uiautomator.BasicSample.test/Android.sup /
port.test.runner.AndroidJUnitRunner

Dans la classe de test:

{
    Bundle extras = InstrumentationRegistry.getArguments();
    String peerID = null;

    if ( extras != null ) {
        if ( extras.containsKey ( "peerID" ) ) {
            peerID = extras.getString("peerID");
            System.out.println("PeerID: " + peerID);
        } else {
            System.out.println("No PeerID in extras");
        }
    } else {
        System.out.println("No extras");
    }
}
14
Tony Nutter

est exactement: 

 ./adb Shell am start -a Android.intent.action.VIEW -c Android.intent.category.DEFAULT -e user_id 1 -n com.shortcut.activity/com.shortcut.activity.SelectCardActivity

com.shortcut.activity/com.shortcut.activity.SelectCardActivity -> Connectez-vous à l'application de démarrage de votre principale activité de classe. passera à votre application param user_id = 1 et sur la classe SelectCardActivity, vous l'obtiendrez comme suit:

  Bundle installparams = this.getIntent ( ).getExtras ( );
0
Quang Binh Nguyen

Puisque vous travaillez déjà sur Android SDK, étant donné que vous connaissez l'emplacement du SDK sur votre système - , Accédez à l'emplacement du SDK sur le terminal (invite de commande) -> tapez adb Shell -> tapez am help

avec l'exemple http://whenpridefucks.blogspot.in/2011/12/Android-send-broadcast-intents-via-adb.html

0
user1901015