N5ken's technical blog
Just another WordPress.com site
Tag Archives: Test Automation
Using Selenium Android Driver in JRuby
July 24, 2011
Posted by on Currently, in the official Selenium releases, the Android Driver only available in Java, not Ruby, so here is a test to use this driver in other language:
For the top, preparing the environment:
Follow the tutorial to complete: http://code.google.com/p/selenium/wiki/AndroidDriver setting up the Android Emulator
Install the SDK
Download the Android SDK, and unpack it in a directory, say ~/android_sdk/ .
Note 1: if your sdk is installed in a different folder, edit ./properties.yml to reflect that location. ./properties.yml also specifies the Android platform version to use – again update the value to the version of the sdk you want to use e.g. version 8 for Android 2.2
Note2: On Linux, android SDK is distributed for 32-bits machine. If you have a 64-bit machine you will need to install ia32-libs http://developer.android.com/sdk/installing.html#troubleshooting
Execute the following command to create a new Android Virtual Device (avd):
$cd ~/android_sdk/tools/ $./android create avd -n my_android -t 12 -c 100M
-n or naming your android virtual device.
-t for specifying the target. (“./android list targets” will give you a list of all available targets). Make sure the target level you selected corresponds to the latest API level.
-c option is for the SD card storage space.
When prompted “Do you wish to create a custom hardware profile no” enter “no”.
Note: an issue has been discovered with the Java-to-JavaScript bridge in version 2.3 of the emulator which causes problems for the Android Driver. Currently we recommend using version of the Android platform 2.2 for AVDs.
Start the Emulator
Start the emulator (this can take a while):
$./emulator -avd my_android &
Install the Application
Install Android WebDriver Application. Wait until the emulator has started and the home screen is ready. Install android-server.apk:
$./adb -e install -r android-server.apk
If you face an issue, make sure you are allowing installation of application not coming from Android Market (Android Emulator -> Settings -> Applications -> Unknown sources is checked)
Setup Port Forwarding
In a terminal type:
$~/android_sdk/adb forward tcp:8080 tcp:8080
This will make the android server available at http://localhost:8080/wd/hub
Start the WebDriver Server on the device or emulator
Start the WebDriver application just installed in the device or emulator.
Tips
- Remember to set the following settings on your device: Settings -> Applications -> Development -> Check “USB debugging”, “Stay Awake” and “Allow mock locations”.
- Restart adb if you have networking errors reported when your tests run. Sometimes there are issues connecting to the device / emulator after switching devices. run adb kill-server followed by adb start-server then setup port forwarding again for the device you want to use.
Run Your Tests
Run the JRuby codes bellow to launch the example test, you can also find out the missing apache and json library in http://www.findjar.com:
require 'java' require 'guava-r09.jar' require 'org/openqa/selenium/base.jar' require 'org/openqa/selenium/android/android.jar' require 'org/openqa/selenium/webdriver-api.jar' require 'org/openqa/selenium/remote/remote.jar' require 'org/openqa/selenium/remote/common.jar' require 'org/openqa/selenium/net/net.jar' require 'org/openqa/selenium/browserlaunchers/browserlaunchers.jar' require 'org/openqa/selenium/browserlaunchers/launcher-utils.jar' require 'org/openqa/selenium/browserlaunchers/locators/locators.jar' require 'httpcomponents-client-4.1.1/lib/httpcore-4.1.jar' require 'httpcomponents-client-4.1.1/lib/httpclient-4.1.1.jar' require 'commons-logging-1.1.1/commons-logging-1.1.1.jar' require 'json-jena-1.0.jar' import 'org.openqa.selenium.By' import 'org.openqa.selenium.WebElement' import 'org.openqa.selenium.android.AndroidDriver' import 'org.openqa.selenium.remote.SessionId' import 'org.apache.http.HttpHost' import 'org.apache.http.client.ClientProtocolException' driver = AndroidDriver.new driver.get "http://www.google.com.hk" element = driver.find_element By.name("q") element.send_keys "Cheese!" element.submit driver.quit
to be continued…