sikuli-driver team mailing list archive
-
sikuli-driver team
-
Mailing list archive
-
Message #05438
Re: [Question #169859]: Availability? Android: using Monkey runner? Mac: Cocoa Accessibility API?
Question #169859 on Sikuli changed:
https://answers.launchpad.net/sikuli/+question/169859
Status: Answered => Open
Raymond Gonzales is still having a problem:
You have been a major help.
Is there anyway to adapt your example so that I can run it in a Java
project? I have tried and am stuck with instantiating an AndroidScreen
object. I will walk you through what i have done
I am on a Mac running Snow Leopard....
Firstly I created a project in eclipse and added the following jars to my project build path from the projects lib folder:
junit-4.8.2.jar
sikuli-script.jar (RC 3)
android-robot-0.1.jar
monkeyrunner.jar
android.jar
guava-r09.jar
sdklib.jar
ddmlib.jar
Then I created a source folder called:
test
I then created a package called:
com.company.androidautomation.tests
I added one Java file to the package called:
TestAndroid
Here is the code I added to the TestAndroid java class:
CONTENTS OF TestAndroid CLASS:
------------------------------------------------------------------
package com.company.androidautomation.tests;
import org.junit.Test;
import com.android.monkeyrunner.MonkeyDevice;
import com.android.monkeyrunner.adb.AdbBackend;
import com.android.monkeyrunner.core.IMonkeyDevice;
import org.sikuli.script.android.AndroidRobot;
import org.sikuli.script.android.AndroidScreen;
import org.sikuli.script.android.MonkeyPlugin;
public class TestAndroid{
@Test
public void test() throws Exception {
AdbBackend adb = new AdbBackend();
MonkeyDevice monkeyDevice;
IMonkeyDevice iMonkeyDevice = adb.waitForConnection();
monkeyDevice = new MonkeyDevice(iMonkeyDevice);
AndroidRobot robot = new AndroidRobot(monkeyDevice);
MonkeyPlugin monkey = new MonkeyPlugin();
iMonkeyDevice.type("go");
iMonkeyDevice.type("\n");
AndroidScreen scr = new AndroidScreen();
}
}
------------------------------------------------------------------
I have to go into the Run Configurations for my class (right click on the class go to Run As > Run Configurations), select the Arguments tab and then in VM arguments text box, I paste the following so that my project knows about my android sdk location:
-cp /Users/[HOME DIRECTORY NAME]/workspace/AndroidTest/lib/sikuli-script.jar:/Users/[HOME DIRECTORY NAME]/workspace/AndroidTest/lib/android-robot-0.1.jar:/Users/[HOME DIRECTORY NAME]/android-sdk-mac_x86/tools/lib/monkeyrunner.jar
-Djava.ext.dirs=/Users/[HOME DIRECTORY NAME]/android-sdk-mac_x86/tools/lib
-Djava.library.path=/Users/[HOME DIRECTORY NAME]/android-sdk-mac_x86/tools/lib
-Dcom.android.monkeyrunner.bindir=/Users/[HOME DIRECTORY NAME]/android-sdk-mac_x86/tools
------------------------------------------------------------------
I then start the emulator myself and go to google.com and select a text
box manually to prep for my test
------------------------------------------------------------------
The problem occurs when the Andoird scr object tries to get
instantiated. When the AndroidScreen tries to make a connection to the
emulator, the connection will time out and I get the following errors:
Sep 19, 2011 11:05:25 AM com.android.monkeyrunner.MonkeyManager sendMonkeyEventAndGetResponse
INFO: Monkey Command: wake.
Sep 19, 2011 11:05:25 AM com.android.monkeyrunner.MonkeyManager sendMonkeyEventAndGetResponse
INFO: Monkey Command: type go.
Sep 19, 2011 11:05:25 AM com.android.monkeyrunner.MonkeyManager sendMonkeyEventAndGetResponse
INFO: Monkey Command: press enter.
java.lang.NullPointerException
at com.android.monkeyrunner.MonkeyRunner.waitForConnection(MonkeyRunner.java:78)
at org.sikuli.script.android.AndroidScreen.initRobots(AndroidScreen.java:30)
at org.sikuli.script.android.AndroidScreen.<init>(AndroidScreen.java:55)
at com.company.androidautomation.tests.TestAndroid.test(TestAndroid.java:28)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
[error] no connection to android device.
Here is another stack trace that I get from jUnit:
java.lang.NoSuchMethodError: com.android.monkeyrunner.MonkeyDevice.getProperty(Ljava/lang/String;)Ljava/lang/String;
at org.sikuli.script.android.AndroidScreen.getBounds(AndroidScreen.java:47)
at org.sikuli.script.android.AndroidScreen.<init>(AndroidScreen.java:56)
at com.company.androidautomation.tests.TestAndroid.test(TestAndroid.java:28)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
--
You received this question notification because you are a member of
Sikuli Drivers, which is an answer contact for Sikuli.