Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

robotiumRC:Error: Bad component name: android.test.InstrumentationTestRunner #624

Closed
renas opened this issue Aug 20, 2015 · 4 comments
Closed

Comments

@renas
Copy link
Contributor

renas commented Aug 20, 2015

From bingyuan...@gmail.com on October 30, 2013 22:11:37

What steps will reproduce the problem? 1. I writed a class file,according to example in wiki:

package com.android.test.rc;
import java.util.Properties;
import com.jayway.android.robotium.remotecontrol.solo.Message;
import com.jayway.android.robotium.remotecontrol.solo.SoloTest;
public class MyTest extends SoloTest{
public static final String DEFAULT_AUT_APK = "E:\android\test\NotePad\bin\NotePad.apk";
public static final String messengerApk="C:\robotiumrc\SAFSTCPMessenger\bin\SAFSTCPMessenger-debug.apk";
public static final String testRunnerApk="C:\robotiumrc\RobotiumTestRunner\bin\RobotiumTestRunner-debug.apk";
public static final String instrumentArg="android.test.InstrumentationTestRunner";
public MyTest(){
super();
}
public MyTest(String[] args){
super(args);
}
public MyTest(String messengerApk, String testRunnerApk, String instrumentArg){
super(messengerApk, testRunnerApk, instrumentArg);
}

  public static void main(String[] args){
      SoloTest soloTest = new MyTest(messengerApk,testRunnerApk,instrumentArg);
      soloTest.setAUTApk(DEFAULT_AUT_APK);
      soloTest.process();
  }

    protected void test(){
      try{

          String activityID = solo.getCurrentActivity();
          Properties props = solo._last_remote_result;
          String activityName = props.getProperty(Message.PARAM_NAME);
          String activityClass = props.getProperty(Message.PARAM_CLASS);

          System.out.println("CurrentActivity   UID: "+ activityID);
          System.out.println("CurrentActivity Class: "+ activityClass);
          System.out.println("CurrentActivity  Name: "+ activityName);

      }catch(Exception e){

          e.printStackTrace();

      }
    }

}
2.run as java application:
Attempting to initialize Android Tools...
C:\Program Files\Android\android-sdk doesn't exist.
Setting Android Tools SDK Dir to E:\android\adt-bundle-windows-x86-20130917\adt-bundle-windows-x86-20130917\sdk
SoloTest INFO: Detected 1 device/emulators attached.
SoloTest DEBUG: INSTALLING E:\android\test\NotePad\bin\NotePad.apk
INSTALLING E:\android\test\NotePad\bin\NotePad.apk
Checking for devices going offline...
Checking 1 for 'offline' status....
No 'offline' devices detected.
ATTEMPTING ADB Install command: adb [Ljava.lang.String;@1a7789c
pkg: /data/local/tmp/NotePad.apk

Success

408 KB/s (65420 bytes in 0.156s)
ADB Install command successful.
SoloTest DEBUG: INSTALLING C:\robotiumrc\SAFSTCPMessenger\bin\SAFSTCPMessenger-debug.apk
INSTALLING C:\robotiumrc\SAFSTCPMessenger\bin\SAFSTCPMessenger-debug.apk
Checking for devices going offline...
Checking 1 for 'offline' status....
No 'offline' devices detected.
ATTEMPTING ADB Install command: adb [Ljava.lang.String;@6db33c
pkg: /data/local/tmp/SAFSTCPMessenger-debug.apk

Success

312 KB/s (34993 bytes in 0.109s)
ADB Install command successful.
SoloTest DEBUG: INSTALLING C:\robotiumrc\RobotiumTestRunner\bin\RobotiumTestRunner-debug.apk
INSTALLING C:\robotiumrc\RobotiumTestRunner\bin\RobotiumTestRunner-debug.apk
Checking for devices going offline...
Checking 1 for 'offline' status....
No 'offline' devices detected.
ATTEMPTING ADB Install command: adb [Ljava.lang.String;@1dafb4e
pkg: /data/local/tmp/RobotiumTestRunner-debug.apk

Success

395 KB/s (126654 bytes in 0.312s)
ADB Install command successful.
LAUNCHING android.test.InstrumentationTestRunner
Checking for devices going offline...
Checking 1 for 'offline' status....
No 'offline' devices detected.
usage: am [subcommand] [options]

usage: am start [-D] [-W] [-P ] [--start-profiler ]

           [--R COUNT] [-S] [--opengl-trace]

           [--user \<USER_ID> | current] \<INTENT>

   am startservice [--user \<USER_ID> | current] \<INTENT>

   am force-stop [--user \<USER_ID> | all | current] \<PACKAGE>

   am kill [--user \<USER_ID> | all | current] \<PACKAGE>

   am kill-all

   am broadcast [--user \<USER_ID> | all | current] \<INTENT>

   am instrument [-r] [-e \<NAME> \<VALUE>] [-p \<FILE>] [-w]

           [--user \<USER_ID> | current]

           [--no-window-animation] \<COMPONENT>

   am profile start [--user \<USER_ID> current] \<PROCESS> \<FILE>

   am profile stop [--user \<USER_ID> current] [<PROCESS>]

   am dumpheap [--user \<USER_ID> current] [-n] \<PROCESS> \<FILE>

   am set-debug-app [-w] [--persistent] \<PACKAGE>

   am clear-debug-app

   am monitor [--gdb \<port>]

   am hang [--allow-restart]

   am screen-compat [on|off] \<PACKAGE>

   am to-uri [INTENT]

   am to-intent-uri [INTENT]

   am switch-user \<USER_ID>

   am stop-user \<USER_ID>

am start: start an Activity. Options are:

-D: enable debugging

-W: wait for launch to complete

--start-profiler \<FILE>: start profiler and send results to \<FILE>

-P \<FILE>: like above, but profiling stops when app goes idle

-R: repeat the activity launch \<COUNT> times.  Prior to each repeat,

    the top activity will be finished.

-S: force stop the target app before starting the activity

--opengl-trace: enable tracing of OpenGL functions

--user \<USER_ID> | current: Specify which user to run as; if not

    specified then run as the current user.

am startservice: start a Service. Options are:

--user \<USER_ID> | current: Specify which user to run as; if not

    specified then run as the current user.

am force-stop: force stop everything associated with .

--user \<USER_ID> | all | current: Specify user to force stop;

    all users if not specified.

am kill: Kill all processes associated with . Only kills.

processes that are safe to kill -- that is, will not impact the user

experience.

--user \<USER_ID> | all | current: Specify user whose processes to kill;

    all users if not specified.

am kill-all: Kill all background processes.

am broadcast: send a broadcast Intent. Options are:

--user \<USER_ID> | all | current: Specify which user to send to; if not

    specified then send to all users.

--receiver-permission \<PERMISSION>: Require receiver to hold permission.

am instrument: start an Instrumentation. Typically this target

is the form <TEST_PACKAGE>/<RUNNER_CLASS>. Options are:

-r: print raw results (otherwise decode REPORT_KEY_STREAMRESULT).  Use with

    [-e perf true] to generate raw output for performance measurements.

-e \<NAME> \<VALUE>: set argument \<NAME> to \<VALUE>.  For test runners a

    common form is [-e \<testrunner_flag> \<value>[,<value>...]].

-p \<FILE>: write profiling data to \<FILE>

-w: wait for instrumentation to finish before returning.  Required for

    test runners.

--user \<USER_ID> | current: Specify user instrumentation runs in;

...

Original issue: http://code.google.com/p/robotium/issues/detail?id=545

@renas
Copy link
Contributor Author

renas commented Aug 20, 2015

From carl.na...@sas.com on October 31, 2013 06:07:10

Reviewing and researching...

Owner: carl.na...@sas.com

@renas
Copy link
Contributor Author

renas commented Aug 20, 2015

From carl.na...@sas.com on October 31, 2013 06:45:21

I see a few things of note:

  1. You seem to be using an ADT Bundle for Eclipse as your Android SDK environment. This mode hasn't been tested. However, in reviewing the information online about the asset locations in the ADT Bundle I don't think that in itself is the problem.

What may be the problem is that this ADT Bundle was released AFTER RobotiumRC 2013.09.09. I'm venturing a guess the ADT Bundle might include new versions of tools--or different Eclipse versions of tools--that are NOT backward compatible with the normal command-line Android SDK tools we have used before this toolset release.

We will have to evaluate the use of the ADT Bundle as a supported mode of command-line driven execution.

This part of the log leads me to believe, for example, the am (Activity Manager?) tool usage and api might be different:

No 'offline' devices detected.
usage: am [subcommand] [options]
...
[Help for am command usage follows]
...
  1. Has the Notepad.apk been build or re-signed with the same developer certificate used to build the SAFSTCPMessenger and RobotiumTestRunner?

  2. Could you clarify the statement below? I don't know what it means:

    I found it's not "
    <instrumentation android:name=
    "com.jayway.android.robotium.remotecontrol.client.RobotiumTestRunner"
    in lib jar.

What lib jar are you looking at?
The RobotiumTestRunner is not supposed to be in any particular JAR file, per se.
It is in the /src folder for the code that makes the RobotiumTestRunner and is built into the installed APK.

Cc: lei.w...@sas.com

@renas
Copy link
Contributor Author

renas commented Aug 20, 2015

From leiwang...@gmail.com on October 31, 2013 20:04:48

I think the problem is the parameter 'instrumentArg' is not correctly assigned, you define it as:
public static final String instrumentArg="android.test.InstrumentationTestRunner";
If you remove it from your code, I guess the problem will disappear.

This parameter will be used to launch the Instrument by android ADB,
On page http://developer.android.com/tools/help/adb.html , under section of "Using activity manager (am)", look at the command instrument, the is our parameter 'instrumentArg', it should be given as <TEST_PACKAGE>/<RUNNER_CLASS>

In RobotiumRCRelease2013.09.09, two TestRunners have been provided, one is RobotiumTestRunner, the other is SAFSTestRunner. You can use either of them to do the test, but SAFSTestRunner provides more functionality.

If you use RobotiumTestRunner, you don't need to provide parameter 'instrumentArg'. RobotiumTestRunner is the default Runner, and 'instrumentArg' has been default assigned as "com.jayway.android.robotium.remotecontrol.client/com.jayway.android.robotium.remotecontrol.client.RobotiumTestRunner"

If you want to use SAFSTestRunner, you need to assign 'instrumentArg' as "org.safs.android.engine/org.safs.android.engine.DSAFSTestRunner". One more thing, (suppose RC is installed at C:\robotiumrc) you need to modify the file C:\robotiumrc\SAFSTCPMessenger\local.properties
change value of 'safs.droid.automation.libs' from "C:\robotiumrc\RobotiumTestRunner\libs" to "C:\robotiumrc\SAFSTestRunner\libs"

@renas
Copy link
Contributor Author

renas commented Aug 20, 2015

From carl.na...@sas.com on November 19, 2013 07:02:21

Status: WontFix

@renas renas closed this as completed Aug 20, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant