|
|
| Line 9: |
Line 9: |
| Install Eclipse with Android Support. Make sure your tablet has USB Debugging enabled. | | Install Eclipse with Android Support. Make sure your tablet has USB Debugging enabled. |
|
| |
|
| Follow these instructions to install fennec on your android: [https://wiki.mozilla.org/QA/Automation_Services/Projects/FennecAutomation/FAQ wiki.mozilla.org/QA/Automation_Services/Projects/FennecAutomation/FAQ]<br> | | Follow these instructions to install fennec on your android: [https://wiki.mozilla.org/QA/Automation_Services/Projects/FennecAutomation/FAQ wiki.mozilla.org/QA/Automation_Services/Projects/FennecAutomation/FAQ]<br> |
| | |
| | This should somewhat replicate [https://github.com/tfairey/Robocop this github repository] .<br> |
|
| |
|
| <br> Create a new java project. | | <br> Create a new java project. |
| Line 25: |
Line 27: |
| *Select src folder. It should be empty | | *Select src folder. It should be empty |
| *Add new Package. This should have the same name as your fennec package (org.mozilla.fennec or org.mozilla.fennec_<username>) | | *Add new Package. This should have the same name as your fennec package (org.mozilla.fennec or org.mozilla.fennec_<username>) |
| *Add Example.java. NOTE: org.mozilla.fennec should be replaced by the package name of your build if it is different. | | *Add ExampleTest.java from the github repository. NOTE: org.mozilla.fennec_tfairey should be replaced by the package name of your build if it is different. |
| <pre>package org.mozilla.fennec;
| |
| import java.lang.Boolean;
| |
| import com.jayway.android.robotium.solo.Solo;
| |
| import org.mozilla.robotest.R;
| |
| import android.test.ActivityInstrumentationTestCase2;
| |
| import android.app.Instrumentation;
| |
| import android.util.Log;
| |
| import android.view.KeyEvent;
| |
| import android.widget.EditText;
| |
| import android.app.Activity;
| |
| import android.database.Cursor;
| |
| import android.widget.Button;
| |
| import android.widget.ListView;
| |
| import android.widget.RelativeLayout;
| |
| import android.view.Display;
| |
| import android.view.MotionEvent;
| |
| import android.view.MotionEvent.PointerCoords;
| |
| import java.lang.Class;
| |
| import android.os.SystemClock;
| |
| | |
| @SuppressWarnings("unused")
| |
| public class Example extends ActivityInstrumentationTestCase2{
| |
|
| |
| public Example(Class activityClass) {
| |
| super(activityClass);
| |
| // TODO Auto-generated constructor stub
| |
| }
| |
| private static final String TARGET_PACKAGE_ID = "org.mozilla.gecko";
| |
| private static final String LAUNCH_ACTIVITY_FULL_CLASSNAME="org.mozilla.fennec.App";
| |
| //private static final String LAUNCH_ACTIVITY_FULL_CLASSNAME="org.mozilla.gecko.AwesomeBar";
| |
|
| |
| private static Class<?> launcherActivityClass;
| |
|
| |
| static{
| |
| try{
| |
| launcherActivityClass = Class.forName(LAUNCH_ACTIVITY_FULL_CLASSNAME);
| |
| } catch (ClassNotFoundException e){
| |
| throw new RuntimeException(e);
| |
| }
| |
| }
| |
| | |
| @SuppressWarnings("unchecked")
| |
| public Example() throws ClassNotFoundException {
| |
| super(TARGET_PACKAGE_ID, launcherActivityClass);
| |
| }
| |
| | |
| private Solo solo;
| |
| private Activity activity;
| |
| private Activity awesome;
| |
| private Object assertValue;
| |
| private Instrumentation inst;
| |
| | |
| @Override
| |
| protected void setUp() throws Exception
| |
| {
| |
| //setActivityInitialTouchMode(true);
| |
| activity = getActivity();
| |
| | |
| inst = getInstrumentation();
| |
| solo = new Solo(inst, activity);
| |
| }
| |
|
| |
| public void testExampleTest() {
| |
| try {
| |
| waitForFennecContent();
| |
| //Thread.sleep(5500);
| |
| //Click on Awesomebar
| |
| selectAwesomeBar();
| |
| waitForAwesomeBar();
| |
| //Thread.sleep(5500);
| |
| //Switch to using AwesomeBar activity
| |
| selectURLBar();
| |
| //Thread.sleep(5500);
| |
| //Input Webpage
| |
| inputText("www.");
| |
| String[] firstAll = getAwesomeBarTabs();
| |
| inputText("mozilla.com");
| |
| String[] secondAll = getAwesomeBarTabs();
| |
| String[] thirdAll = getAwesomeBarTabs();
| |
| //Assert URL, and that the AwesomeBarTabs changed, and then didn't
| |
| assertURL("www.mozilla.com");
| |
| assertEquals(areSArraysEqual(firstAll, secondAll), false);
| |
| assertEquals(areSArraysEqual(secondAll, thirdAll), true);
| |
| //Assert that content isn't showing yet
| |
| assertEquals(contentShown(), false);
| |
| //Press Enter
| |
| sendKeys(KeyEvent.KEYCODE_ENTER);
| |
| waitForFennecContent();
| |
| //Assert Content is Showing.
| |
| assertEquals(contentShown(), true);
| |
| Thread.sleep(20000);
| |
| } catch (InterruptedException e) {
| |
| // TODO Auto-generated catch block
| |
| e.printStackTrace();
| |
| }
| |
| }
| |
|
| |
| public void waitForFennecContent() {
| |
| while(!contentShown()) {continue;}
| |
|
| |
| }
| |
|
| |
|
| |
| public void waitForAwesomeBar() {
| |
| awesome = solo.getCurrentActivity();
| |
| while(!awesome.toString().contains("AwesomeBar")) {
| |
| awesome = solo.getCurrentActivity();
| |
| }
| |
|
| |
| }
| |
|
| |
| public boolean contentShown() {
| |
| awesome = solo.getCurrentActivity();
| |
| //RelativeLayout rl = (RelativeLayout)awesome.findViewById(0x7f090015);
| |
| RelativeLayout rl = (RelativeLayout)solo.getView(0x7f090011);
| |
| if(rl == null)
| |
| {
| |
| return false;
| |
| }
| |
| return true;
| |
| }
| |
|
| |
| public boolean areSArraysEqual(String [] a, String [] b) {
| |
| boolean eq = true;
| |
| if(a.length != b.length) {
| |
| return false;
| |
| }
| |
| for(int i = 0; i < a.length; i++) {
| |
| if(!a[i].equals(b[i])) {
| |
| return false;
| |
| }
| |
| }
| |
| return true;
| |
| }
| |
|
| |
| public String [] getAwesomeBarTabs() {
| |
| awesome = solo.getCurrentActivity();
| |
| awesome.runOnUiThread(
| |
| new Runnable() {
| |
| public void run() {
| |
| String[] result;
| |
| ListView lv = (ListView)awesome.findViewById(0x7f090006);
| |
| int length = lv.getCount();
| |
| result = new String[length];
| |
| Cursor cursor;
| |
| for(int i = 0; i < length; i++) {
| |
| cursor = (Cursor)lv.getItemAtPosition(i);
| |
| result[i] = cursor.getString(cursor.getColumnIndexOrThrow("url"));
| |
| }
| |
|
| |
| assertValue = result;
| |
| } // end of run() method definition
| |
| } // end of anonymous Runnable object instantiation
| |
| );
| |
|
| |
| try { Thread.sleep(500); }
| |
| catch (InterruptedException e) {
| |
| e.printStackTrace();
| |
| }
| |
| return (String[])assertValue;
| |
| }
| |
|
| |
|
| |
| public void assertURL(String s)
| |
| {
| |
| awesome = solo.getCurrentActivity();
| |
| awesome.runOnUiThread(
| |
| new Runnable() {
| |
| public void run() {
| |
| EditText et = (EditText)awesome.findViewById(0x7f090004);
| |
| assertValue = et.getText().toString();
| |
| } // end of run() method definition
| |
| } // end of anonymous Runnable object instantiation
| |
| );
| |
| try { Thread.sleep(5000); }
| |
| catch (InterruptedException e) {
| |
| e.printStackTrace();
| |
| }
| |
| assertEquals(s,(String)assertValue);
| |
| }
| |
| | |
| public void inputText(String input)
| |
| {
| |
| for(int i = 0; i < input.length(); i++) {
| |
| char c = input.charAt(i);
| |
| if( c >= 'a' && c <='z') {
| |
| sendKeys(29+(int)(c-'a'));
| |
| continue;
| |
| }
| |
| else if( c >= 'A' && c <='Z') {
| |
| sendKeys(KeyEvent.KEYCODE_CAPS_LOCK);
| |
| sendKeys(29+(int)(c-'a'));
| |
| sendKeys(KeyEvent.KEYCODE_CAPS_LOCK);
| |
| continue;
| |
| }
| |
| else if( c >= '0' && c <='9') {
| |
| sendKeys(29+(int)(c-'0'));
| |
| continue;
| |
| }
| |
| switch (c) {
| |
| case '.':
| |
| sendKeys(KeyEvent.KEYCODE_PERIOD);
| |
| break;
| |
| case '/':
| |
| sendKeys(KeyEvent.KEYCODE_SLASH);
| |
| break;
| |
| case '\\':
| |
| sendKeys(KeyEvent.KEYCODE_BACKSLASH);
| |
| break;
| |
| case '-':
| |
| sendKeys(KeyEvent.KEYCODE_MINUS);
| |
| break;
| |
| case '+':
| |
| sendKeys(KeyEvent.KEYCODE_PLUS);
| |
| break;
| |
| case ',':
| |
| sendKeys(KeyEvent.KEYCODE_COMMA);
| |
| break;
| |
| default:
| |
| }
| |
| }
| |
| }
| |
| | |
| public void selectAwesomeBar()
| |
| {
| |
| activity.runOnUiThread(
| |
| new Runnable() {
| |
| public void run() {
| |
| Button awesomebar = (Button)activity.findViewById(0x7f09000a);
| |
| awesomebar.performClick();
| |
| }
| |
| });
| |
| }
| |
| public void selectURLBar()
| |
| {
| |
| awesome = solo.getCurrentActivity();
| |
| awesome.runOnUiThread(
| |
| new Runnable() {
| |
| public void run() {
| |
| EditText et = (EditText)awesome.findViewById(0x7f090004);
| |
| et.requestFocus();
| |
| } // end of run() method definition
| |
| } // end of anonymous Runnable object instantiation
| |
| );
| |
| }
| |
|
| |
| @Override
| |
| public void tearDown() throws Exception {
| |
| try {
| |
| solo.finalize();
| |
| }catch (Throwable e){
| |
| e.printStackTrace();
| |
| }
| |
| getActivity().finish();
| |
| super.tearDown();
| |
| }
| |
| }
| |
| | |
| | |
|
| |
|
| </pre>
| |
| Edit the Manifest:<br> | | Edit the Manifest:<br> |
|
| |
|