29 June, 2011

How to install Webdriver on Android Emulator on Windows

Following my previous post, I needed to install Webdriver on Android Emulator.  I have Windows 7 installed and most of the instructions were for Linux, so I thought this might be helpful.
image
So even this is pretty straight forward. Let’s run through the steps I followed to install Webdriver:
  1. Download “android-server-2.0.2rc3.apk ” from the following location http://code.google.com/p/selenium/downloads/list.
  2. Copy the above downloaded file into folder “C:\Program Files\Android\android-sdk\platform-tools
  3. Run the “Command Prompt” as administrator.
  4. Execute “cd C:\Program Files\Android\android-sdk\platform-tools
  5. Execute the command “adb install  android-server-2.0.2rc3.apk
  6. We also need to set up Port forwarding, run the command “adb forward tcp:8080 tcp:8080"
  7. Click on the WebDriver app on Emulator and this will make the android server available at “http://localhost:8080/wd/hub”. Opening this URL in Firefox will show up a blank page on success.
  8. Confirm the following settings on your emulator : Settings -> Applications -> Development -> Check "USB debugging", "Stay Awake" and "Allow mock locations".
  9. Launch the emulator, it will have Webdriver installed. When you launch the Webdriver, it will confirm “jetty started

23 comments:

Niloy said...

hi friend.

thank you for your post. i have already install webdriver in the android emulator. but how how i will run the following test in that webdriver inside emulator from eclipes??
the code :
import junit.framework.TestCase;

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.android.AndroidDriver;

public class OneTest extends TestCase {

public void testGoogle() throws Exception {
AndroidDriver driver = new AndroidDriver();

// And now use this to visit Google
driver.get("http://www.google.com");

// Find the text input element by its name
WebElement element = driver.findElement(By.name("q"));

// Enter something to search for
element.sendKeys("Cheese!");

// Now submit the form. WebDriver will find the form for us from the element
element.submit();

// Check the title of the page
System.out.println("Page title is: " + driver.getTitle());
driver.quit();

}
}

i tried in few ways. but always unsuccessful. so plz tell me in details. i will be really thankful to you if you have time to help me.. thank you

Nishant Verma said...

Hey first you need to start the Emulator and run the webdriver application on it. It will show a message "Jetty started". Post then you can run your test.

Even after trying this, it doesn't work then you can send men the stack trace and then probably I will be able to help you more on this.

Niloy said...

i started the webdriver in the andriod emulator 2.2. and then "jetty started" this message is shown. so jetty started successfuly. but when i am running the code them i am geting the error.

i will send you the error tress but i cant post that here in the blog cus this blug does not allow me to post htmlcode.

plz share me you email address i will send you by email.so i can send you the error tress

my email is niloy.cit1@gmail.com

Nishant Verma said...

@Niloy Hey you can mail me at nishuverma@gmail.com

Niloy said...

hi friend ? i send you two email. have u got those ?
for using android webdriver on emulator you download which version and from which source ? plz share me the link. the current which i am working now maybe not so stable. cus i am doing some functionality in webdriver in ff but that is not working in android. quite strange.....

Nishant Verma said...

@Niloy Probably you need to check the Pros and cons here... http://code.google.com/p/selenium/wiki/AndroidDriver

Niloy said...

thank you for your reply. i have gone thought that page already. they are speaking about the version. i am suing 2.2 according to their suggestion. as an example. i am trying to log in in my emulator by andriod webdriver. suppose i set up user name = aaaa and password = bbb.i set them as
driver.findElement(By.id("Email")).sendKeys("aaaa");
driver.findElement(By.name("Passwd")).sendKeys("123456");


but when i run the webdriver in emulator then always this is filling up the password field in www.gmail.com and failed to log in.


what is the problem with this ?

Nishant Verma said...

Dude it's more of your specific issue which you are trying to get rectified.
Suggest you try with the mobile version of app on the browser(Http://m.gmail.com/) and then use that script.
All the best in your endeavors.

In case you have specific selenium issues, try porting to the Selenium community.

Thanks,
Nishant Verma

Niloy said...

i tried with m.gmail.com but then also the user name and password always puting on the password text box and always failing to log in... why this is happening ?

zique said...

Hi I am really new to Mobile testing with Selenium. I setup an Emulator and I attempted to execute your sample test above, but when I do I get E/AndroidRuntime( 2979): java.lang.RuntimeException: Unable to instantiate activ
ity ComponentInfo{com.example/com.example.OneTestActivity}: java.lang.Instantiat
ionException: com.example.OneTestActivity
E/AndroidRuntime( 2979): at android.app.ActivityThread.performLaunchActiv
ity(ActivityThread.java:2585)
E/AndroidRuntime( 2979): at android.app.ActivityThread.handleLaunchActivi
ty(ActivityThread.java:2679)
E/AndroidRuntime( 2979): at android.app.ActivityThread.access$2300(Activi


Can you help?

Nishant Verma said...

Hey you can mail me what are you doing and what machine you have OS etc...

Also I think in the latest android sdk you need to start webdriver using command prompt.

Amar said...

Hi,

When i create the Test project for testing using Android Driver, in Test project what external jars i have to add.
Inside selenium-2.5.0, there are selenium-java-2.5.0.jar, selenium-java-2.5.0-srcs.jar and libs folder. Inside libs folder, there are also many jars. Should i have to add all the jars as external jar to the test project.

If i add all the jars, then when i build the test project, it takes a long time to build and then finally i get the error: Unable to execute, not sufficient heap space.

If i add only the two jars(selenium-java-2.5.0.jar, selenium-java-2.5.0-srcs.jar ) or single jar(selenium-java-2.5.0.jar), then i get the error:

[2011-09-19 18:31:58 - AndroidTest] Dx
UNEXPECTED TOP-LEVEL EXCEPTION:
java.lang.IllegalArgumentException: already added: Lorg/openqa/selenium/interactions/Action;
[2011-09-19 18:31:58 - AndroidTest] Dx at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123)
..........
..........

[2011-09-19 18:31:58 - AndroidTest] Conversion to Dalvik format failed with error 1


Please help me to solve the problem.

Nyarlathotep said...

Hi,

for what concerns the "UNEXPECTED TOP-LEVEL EXCEPTION" problem, I've just found out that the selenium-java .jar file contains double instances of the same .class files for some reason.

I'm trying to build it from the source and let's see what happens.

Георгий said...

I have same problem! Please, help.

Anonymous said...

I am new to Selenium2. I have a requirement to test my application on android. I did all the setup that mentioned in the wiki,But it is not working. Can you please help me out in this issue. Or provide any useful links containing how to automate tests in mobile apps.

Thanks in advance,
Eeeshwar

Sunil said...

Unable to use cssSelector or xpath with AdroidDriver.
Scenario:I was trying to sign-in to mail.in.com, but unable to click on Sign-in button. Here is the code I tried. Kindly reply on this issue

driver = new AndroidDriver();
driver.get("http://mail.in.com");
Thread.sleep(1000);
driver.findElement(By.id("f_id")).sendKeys("seleniumforum_Nageswar");
driver.findElement(By.id("f_pwd")).sendKeys("XXXXX");
driver.findElement(By.xpath("/html/body/div[@id='main']/div[1]/div[1]/div[1]/p/a[5]")).click();

(OR)


driver = new AndroidDriver();
driver.get("http://mail.in.com");
Thread.sleep(1000);
driver.findElement(By.id("f_id")).sendKeys("seleniumforum_Nageswar");
driver.findElement(By.id("f_pwd")).sendKeys("XXXXX");
driver.findElement(By.cssSelector("input.signin")).click();

venki said...

Hi Nishant,

I am new to this Android Webdriver Technology,here i had set up the enviroment and trying to execute the sample script below,but getting error has "Authentication required to access the internet in this system" in the emulator.

Before ruuning it started the webdriver application in the emulator and established the connection between the localhost server also,but it giving this error. Can u please help me in this out.

And one more clarification,when i am trying to access internet simply through android browser i am able to browse something.But when executing through script only i am getting the error.

import junit.framework.TestCase;

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.android.AndroidDriver;

public class OneTest extends TestCase {

public void testGoogle() throws Exception {
AndroidDriver driver = new AndroidDriver();

// And now use this to visit Google
driver.get("http://www.google.com");

// Find the text input element by its name
WebElement element = driver.findElement(By.name("q"));

// Enter something to search for
element.sendKeys("Cheese!");

// Now submit the form. WebDriver will find the form for us from the element
element.submit();

// Check the title of the page
System.out.println("Page title is: " + driver.getTitle());
driver.quit();

}
}

Chaitu said...

Hi Nishant,

Do you know how to start webdriver application on the android emulator from command line?

I am trying to run a test from java and want to make everything automated. I have installed the webdriver apk on the emulator.

Appreciate your help!!

-Krishna

Anonymous said...

Hey guys, i don't know how to create the correct project for "OneTest.java" from selenium official website.
I follow the guide from http://code.google.com/p/selenium/wiki/AndroidDriver
to setup the example code of
using remote server approach ,
but it is not detailed enough.
Can everyone mail me your step or the complete project folder?

my mail: link_5201314@hotmail.com

Manish Singh said...

Hi Nishant, I am new in Android Testing. I am using C# as scripting language but facing problem to initiate from code, may you please help me out to start the code for same. I have written under given code but not working @ line no 20 showing Android Device not exists.

public class UnitTest1
{
private IWebDriver WebDriver;


[TestInitialize]
public void TestInitializeAttribute()
{
WebDriver = new AndroidDriver();
var browser = new RemoteWebDriver(new Uri("http://localhost:8080/wd/hub/static/resource/hub.html"), new DesiredCapabilities("Android", "", Platform.CurrentPlatform));
WebDriver.Manage().Timeouts().ImplicitlyWait(new TimeSpan(0, 0, 30));
}

[SetUp]
public void TestSetUp()
{
WebDriver.Navigate().GoToUrl("http://www.google.co.uk");

}

Prasad said...

Hi Nishanth. I am working for the android automation for mobile web and app projects.

Can you please help regarding the below :

I am in the means of setting up of android drivers and followed the same steps as mentioned in the url : http://code.google.com/p/selenium/wiki/AndroidDriver

1) downloaded the android SDK for windows and unpacked and placed in the path of selenium repository 2) Set up the emulator and created the new AVD ( android virtual device ) 3)Installed the webdriver apk 4)port forwarding in order to forward traffic from the host machine to the emulator. In a terminal type:

$./adb -s forward tcp:8080 tcp:8080

5) This will make the android server available at //localhost:8080/wd/hub from the host machine.

But when i went to localhost:8080/wd/hub it displayed error 404 : not found

Let me know why this is happening ? anything i missed ?

When taps on webdriver in android emulator it says webdriver ready but not displaying message as Jetty started.. can you also let me know why Jetty is not started ?

Is this necessary to start selenium standalone server and JDK to be installed to which jetty will communicate to the hub ?

Thanks in advance
Prasad

Anonymous said...

Hi Nishanth,

I have the same problem as in previous comment. Do you have any idea what's wrong? And thank you for this post!

Anonymous said...

I tried as you said

but I got the following error

error: device not found
-waiting for device-

Post a Comment

Your comments will be reviewed and then published !