Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Robotium×Ô¶¯»¯²âÊÔ¿ò¼ÜʵÓý̳̣¨Í¼£©
 
  7252  次浏览      29
 2018-4-26
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚ²©¿ÍÔ°,½éÉÜÁËRobotium×Ô¶¯»¯²âÊÔ¿ò¼ÜµÄ³£ÓÃÓï·¨£¬ÊµÕ½ÏîÄ¿£¬ÌØÊâÉèÖõÄ˵Ã÷µÈ¡£

Ò»¡¢¼ò½é

RobotiumÊÇÒ»¿î¹úÍâµÄAndroid×Ô¶¯»¯²âÊÔ¿ò¼Ü£¬Ö÷ÒªÕë¶ÔAndroidƽ̨µÄÓ¦ÓýøÐкںÐ×Ô¶¯»¯²âÊÔ£¬ËüÌṩÁËÄ£Äâ¸÷ÖÖÊÖÊÆ²Ù×÷£¨µã»÷¡¢³¤°´¡¢»¬¶¯µÈ£©¡¢²éÕҺͶÏÑÔ»úÖÆµÄAPI£¬Äܹ»¶Ô¸÷Öֿؼþ½øÐвÙ×÷¡£Robotium½áºÏAndroid¹Ù·½ÌṩµÄ²âÊÔ¿ò¼Ü´ïµ½¶ÔÓ¦ÓóÌÐò½øÐÐ×Ô¶¯»¯µÄ²âÊÔ¡£ÁíÍ⣬Robotium 4.0°æ±¾ÒѾ­Ö§³Ö¶ÔWebViewµÄ²Ù×÷¡£Robotium ¶ÔActivity£¬Dialog£¬Toast£¬Menu ¶¼ÊÇÖ§³ÖµÄ¡£

¶þ¡¢Ïà¹ØÏÂÔØ

Ô´Âë»ñÈ¡£ºhttp://code.google.com/p/robotium/

Ô´APIÎĵµ£ºhttp://robotium.googlecode.com/svn/doc/index.html

robotium5.1ÏÂÔØºÍ×îÐÂAPIÎĵµ£ºhttp://pan.baidu.com/s/1bnlO8MF

¹Ù·½Àý×Ó¼Çʱ¾£ºhttp://pan.baidu.com/s/1qWLVL72

ÖØÇ©Ãû¹¤¾ß£ºhttp://pan.baidu.com/s/1i3H0tKD

Èý¡¢³£ÓÃÓï·¨

<span style = "font-size: 14px;" >1.µÈ´ýtimeoutºÁÃëÒ»¸öÃû×ÖΪnameµÄActivityÆô¶¯£ºwaitForActivity (String name, int timeout )
ʵÀý£ºassertTrue ("ÎÞ·¨Æô¶¯Æô¶¯Àà", solo.waitForActivity ( "MainActivity", 30000 ) );
2.Robotium½«Ë¯ÃßÉèÖõĺÁÃëÊý£ºsleep (int time)
ʵÀý £ºsolo.sleep(5000)
3.Çå¿ÕEditTextµÄÄÚÈÝ£ºclearEditText (android.widget . EditText editText )
ʵÀý£ºsolo.clearEditText ((EditText)solo.getView ( "edtInsertName"))
4.¸ù¾Ý°´Å¥ÉϵÄÎÄ×Öµã»÷°´Å¥£ºclickOnButton (String text)
ʵÀý£ºsolo.clickOnButton ("^ÂÌÉ«$");
5.¸ù¾ÝÎÄ×Öµã»÷¿Ø¼þ£ºclickOnText (String text)
ʵÀý£ºsolo .clickOnText ("¿Ø¼þÉÏÏÔʾÎÄ×Ö");
6.ÊäÈëÄÚÈÝ£ºenterText (android.widget.EditText editText , String text)
solo.enterText ( (EditText) solo .getView ( "edtInsertName "), "˵ЩʲôºÃÄØ£¿");
7.·µ»Ø£ºgoBack()
8.½ØÆÁ²¢±£´æÎªÉèÖõÄÃû×Ö£ºtakeScreenshot (String name)
ĬÈϱ£´æÔÚ£º /sdcard/Robotium-Screenshots/
9.½âËøÆÁÄ»£ºunlockScreen() </span>

ËÄ¡¢ÊµÕ½-Õë¶ÔAPK½øÐеIJâÊÔ

±»²âÊÔÏîĿΪdemo1£¬ÏÂÃæÊÇʵսµÄ¾ßÌå²½Öè

1. ÅäÖÃANDROID_HOMEΪandroid sdkµÄ°²×¿Ä¿Â¼£¬ÀýÈ磺D:\android-sdk

2. ÔÚpathÏÂÌí¼ÓÕâÁ½¸ö£º%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;

3. ÐèÒª°ÑAPKÖØÐÂÇ©Ãû£¬ÒòΪrobotiumÒªÇó±»²âÓ¦ÓúͲâÊÔ´úÂëÒªÓÐÒ»ÖµÄÇ©Ãû, ËùÒÔÎÒÃÇÐèÒª°ÑÏÂÔØµ½µÄapk£¬Í¨¹ýre-sign.jarÀ´²úÉúdebug keyµÄapk£¬Õâ¸öÖØÐÂÉú³ÉµÄapk¾Í»á¸ú²âÊÔÏîĿǩÃûÒ»ÖÂÁË

4. ÏÂÔØÍêºó£¬ÐèÒªÅäÖÃANDROID_HOME,¾ÍÊǰ²×¿SDKµÄλÖã¬È»ºó°ÑAPKÀ­µ½Í¼±êÉÏ£¬¾Í»á×Ô¶¯Éú³ÉÒ»¸ödebug keyµÄapk£¬Èç¹ûÎÞ·¨Ö±½Óµ¥»÷re-sign.jarÔËÐУ¬ÐèÒªÇл»µ½·ÅÖøÃjarÎļþµÄĿ¼£¬cmdÖ´ÐÐjava -jar re-sign.jar²úÉúÐÂapkµÄ¹ý³ÌÖлᵯ³öÒ»¸öÐÅÏ¢¿ò£¬¼ÇµÃ½ØÏÂͼ£¬ÒòΪÀïÃæÓÐÁ½¸öÐÅÏ¢ÎÒÃǵȻáµÄ´úÂëÖÐÐèÒªÓõ½

5. °²×°²úÉúµÄapk¡£È»ºó´ò¿ªÄ£ÄâÆ÷£¨Ä£ÄâÆ÷Æ÷Ò»¶¨Òª´ò¿ª²ÅÄܰ²×°³É¹¦£©£¬È»ºó´ò¿ªÃüÁîÐÐ adb install mitalk_debug.apk(ÐÂÉú³ÉapkµÄÃû³Æ) £¬ »òÕßË«»÷apkÎļþÒ²¿ÉÒÔ°²×°

°²×°³É¹¦¾Í¿ÉÒÔÔÙÄ£ÄâÆ÷Àï¿´µ½¸ÃÓ¦ÓõÄͼ±êÁË

6. ´ò¿ªEclipse£¬µã»÷File->NewÒ»¸öAndroid Test Project TestDemo1, È»ºóµã»÷ÏÂÒ»²½µÄʱºòÑ¡ÔñThis project(ÒòΪÎÒÃDzâÊÔµÄÊÇAPK)£¬È»ºóÑ¡ÔñÒªÔÚÄĸöandroid°æ±¾ÉϲâÊÔ

7. ÔÚ¸ÃÏîĿϴ´½¨Ò»¸ö°ü£¬com.example.demo1.test,ÔڸðüÏ´´½¨TestDemo1ApkÀ࣬ÈçÏÂ

package com.example.demo1.test;
import com.robotium.solo.Solo;
import android.test. Activity Instrumentation TestCase2;
import android.widget .EditText;
@SuppressWarnings ("rawtypes")
public class TestDemo1Apk extends Activity Instrumentation TestCase2 {
private static final String LAUNCHER _ ACTIVITY _ FULL _ CLASSNAME = "com.example .demo1.MainActivity"; //Æô¶¯Àà
private static Class <?> launcherActivity Class;
static {
try {
launcherActivityClass = Class .forName (LAUNCHER _ACTIVITY _ FULL _ CLASSNAME);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
@SuppressWarnings ("unchecked")
public TestDemo1Apk() throws ClassNotFoundException {
super(launcherActivityClass);
}
private Solo solo;
@Override
protected void setUp () throws Exception {
solo = new Solo(getInstrumentation (), getActivity());
}
public void testcase001 () throws Exception {
//µÈ´ý Activity¡¡"MainActivity"¡¡Æô¶¯
assertTrue ("ÎÞ·¨Æô¶¯Æô¶¯Àà", solo. wait ForActivity (" MainActivity ", 30000));
solo.sleep(5000);
// ÊäÈëÎÄ×Ö£º"131243"
solo.enterText (( EditText)solo.getView ("edtInsertName"), "˵ЩʲôºÃÄØ£¿");
solo.sleep(2000);
//Çå¿ÕÊäÈë¿òµÄÄÚÈÝ
solo.clearEditText ((EditText) solo.getView (" edtInsertName "));
//°´ÏÂ °´Å¥ "ÂÌÉ«"
solo.clickOnButton ("^ÂÌÉ«$");
solo. sleep(2000);
// °´Ï °´Å¥ "»ÆÉ«"
solo.clickOnButton ("^»ÆÉ«$");
solo.sleep (2000);
//°´Ï °´Å¥ "À¶É«"
solo.clickOnButton ("^À¶É«$");
solo.sleep(2000);
// °´Ï TextView "¿´ÎÒ±ä±ä±ä~~~"
solo.clickOnText ("^¿´ÎÒ±ä±ä±ä~~~$");
solo.sleep (5000);
}
@Override
public void tearDown () throws Exception {
solo. finishOpenedActivities ();
}
}

8.ÓÒ¼ü¸ÃÏîÄ¿£¬Ñ¡ÔñpropertyÈ»ºóÑ¡Ôñjava build path, Ñ¡Ôñ Add JARs,Ñ¡Ôñϵ½µÄrobotium.jar

Add Library,µã»÷Junit,Ñ¡ÔñJunit4

9.ÔÚÅܲâÊÔÓÃÀý֮ǰ£¬»¹ÐèÒªÐÞ¸ÄÏÂAndroidManifest.xmlÎļþµÄandroid:targetPackageΪ±»²âÓ¦ÓõĸùµÄ°üÃû

<instrumentation
android:name = "android.test .InstrumentationTest Runner "
android:targetPackage = "com.example.demo1" />

10.×îºó£º run as android junit test£¬¾Í¿ÉÒÔ½øÐвâÊÔÁË¡¡¡¡

Ô´ÂëÏÂÔØ£ºhttp://pan.baidu.com/s/1ybPUI

Î塢ʵս-Õë¶Ô¹¤×÷Ŀ¼ÏµÄÏîÄ¿

±»²âÊÔÏîĿΪdemo1£¬ÏÂÃæÊÇʵսµÄ¾ßÌå²½Öè

1.н¨Ò»¸ö²âÊÔÏîÄ¿ÃûΪdemo1Test

Eclipse-File-Project-Android Test Project

²âÊÔÏîÄ¿ÃûΪdemo1Test,²âÊÔÄ¿±êÏîĿѡÔñdemo1¡¡

2.Ìí¼Ó±ØÒªÀà¿â£¬robotiumºÍjunit

£¨1£©ÔÚÏîÄ¿ÖÐн¨libĿ¼£¬°Ñrobotium-solo-5.1.jarºÍrobotium-solo-5.1-javadoc.jarÀ­½ø¸ÃĿ¼¡£

£¨2£©Ìí¼Ójunit4

3.Ìí¼Órobotium

4.´´½¨²âÊÔÓÃÀý

ÓÒ¼üµã»÷°ü-New-JUnit Test Case

×î»ù´¡µÄ²âÊÔÓÃÀý¿ò¼ÜÀà

package com.example.demo1.test;
import com.example.demo1.MainActivity; //µ¼ÈëÄ¿±êÏîÄ¿µÄÆô¶¯Àà
import android.test.Activity Instrumentation Test Case 2;
import com.robotium .solo.Solo;
public class TestDemo1 extends ActivityInstrumentation TestCase2 <MainActivity>{//¼Ì³ÐÄ¿±êÏîÄ¿µÄÆô¶¯Àà
private Solo solo; //³õʼ»¯Ò»¸ösolo¶ÔÏó
public TestDemo1() { //ÔÚ¹¹Ô캯Êý´¦±êÃ÷¼Ì³Ð×ÔÄ¿±êÏîÄ¿µÄÆô¶¯Àà
super (MainActivity.class);
}
@Override
public void setUp () throws Exception { //ÔÚ²âÊÔ¿ªÊ¼Ö®Ç°»áµ÷ÓÃÕâ¸ö·½·¨£¬ÕâÀïÀ´´´½¨Ò»¸öSolo¶ÔÏó
solo = new Solo (getInstrumentation(), getActivity ()) ;
}
@Override
public void tearDown () throws Exception { //Ò»¸ö²âÊÔÓÃÀý½áÊøµÄʱºò»áµ÷ÓÃÕâ¸ö·½·¨
solo.finishOpenedActivities(); //Õâ¸ö·½·¨½«½áÊøµôËùÓÐÔÚ²âÊÔÖ´Ðйý³ÌÖдò¿ªµÄ activity
}
}

ÔÚ»ù´¡²âÊÔÀàÀïÃæÌí¼ÓÏà¹ØµÄ²âÊÔ·½·¨£¬Ò²¾ÍÊÇÕæÕýÔÚÖ´ÐеIJâÊÔÓÃÀý

package com.example .demo1.test;
import com.example.demo1.MainActivity; //µ¼ÈëÄ¿±êÏîÄ¿µÄÆô¶¯Àà
import android.test .ActivityInstrumentationTestCase2 ;
import android.widget .EditText;
import com.robotium.solo .Solo;
public class TestDemo1 extends Activity Instrumentation TestCase2 <MainActivity> {//¼Ì³ÐÄ¿±êÏîÄ¿µÄÆô¶¯Àà
private Solo solo; //³õʼ»¯Ò»¸ösolo¶ÔÏó
public TestDemo1() { //ÔÚ¹¹Ô캯Êý´¦±êÃ÷¼Ì³Ð×ÔÄ¿±êÏîÄ¿µÄÆô¶¯Àà
super (MainActivity.class);
}
@Override
public void setUp () throws Exception { //ÔÚ²âÊÔ¿ªÊ¼Ö®Ç°»áµ÷ÓÃÕâ¸ö·½·¨£¬ÕâÀïÀ´´´½¨Ò»¸öSolo¶ÔÏó
solo = new Solo (getInstrumentation(), getActivity());
}
public void testcase001() throws Exception {
//µÈ´ý Activity¡¡"MainActivity"¡¡Æô¶¯
assertTrue ("ÎÞ·¨Æô¶¯Æô¶¯Àà", solo.waitForActivity ( "MainActivity ", 30000));
solo.sleep (5000);
//ÊäÈëÎÄ×Ö£º"131243"
solo.enterText ( (EditText)solo.getView("edtInsertName"), " ˵ЩʲôºÃÄØ£¿");
solo.sleep(2000);
// Çå¿ÕÊäÈë¿òµÄÄÚÈÝ
solo.clearEditText ((EditText) solo. getView (" edtInsert Name " ) );
//°´ÏÂ °´Å¥ "ÂÌÉ«"
solo.clickOnButton ("^ÂÌÉ«$");
solo.sleep (2000);
//°´Ï °´Å¥ "»ÆÉ«"
solo.clickOnButton ("^»ÆÉ«$");
solo.sleep (2000);
//°´Ï °´Å¥ "À¶É«"
solo.clickOnButton ("^À¶É«$");
solo.sleep(2000);
//°´Ï TextView "¿´ÎÒ±ä±ä±ä~~~"
solo.clickOnText ("^¿´ÎÒ±ä±ä±ä~~~$");
solo.sleep(5000);
}
@Override
public void tearDown() throws Exception { //Ò»¸ö²âÊÔÓÃÀý½áÊøµÄʱºò»áµ÷ÓÃÕâ¸ö·½·¨
solo.finishOpenedActivities();// Õâ¸ö·½·¨½«½áÊøµôËùÓÐÔÚ²âÊÔÖ´Ðйý³ÌÖдò¿ªµÄactivity
}
}

Ô´Âë¹²Ïí£ºhttp://pan.baidu.com/s/1mgKcgju

Áù¡¢Ò»Ð©ÌØÊâÉèÖõÄ˵Ã÷

1.Ìí¼Óµ½¿âÄÚÐèÒªÏÈн¨LibĿ¼£¬ÔÙ°Ñrobotium-solo-5.2.1.jar·Åµ½ÀïÃæ£¬ÕâÑùÒÆ¶¯ÏîÄ¿¾Í²»»áÕÒ²»µ½

2.²âÊÔÏîÄ¿µÄAndroidManifest.xmlÀïÃæ <uses-sdk android:minSdkVersion="10" />ÐèÒªÔÚ8ÒÔÉÏ£¬¶øÇÒÒª¸ú±»²âÊÔµÄÏîĿһÑù´ó

3.ÐèÒª¹´Ñ¡

4.×îϸ½ÚµÄ¾ÍÊÇ£º¹¹Ôì·½·¨±ØÐëÊÇÎÞ²ÎÊýµÄ£¬Ð½¨µÄ²âÊÔÓÃÀýÒ»°ã¶¼ÊÇÓвÎÊýµÄ£º

public TestHelloWorldCase() {

super(HerlloActivity.class);

}

5.²âÊÔAPKµÄʱºòÐèÒªÖØÇ©Ãû£¬È»ºóÔÙ°²×°½øÈ¥£¬²Å¿ÉÒÔÕý³£²âÊÔ

6.ÈçºÎÅäÖÃRobotiumµÄ°ïÖúÌáʾ

ÓÒ¼üµã»÷ÏîÄ¿-Build Path-configure Build Path

7.robotium²»Í¬°æ±¾µÄ·½·¨²»Í¬

robotiumµÄgetCurrentListViews

1.°æ±¾3.6°æ±¾ºÍ4.1ÒÔÉϰ汾µÄ±í´ï·½Ê½

3.6°æ±¾£ºArrayList<ListView> lw = solo.getCurrentListViews();

4.1°æ±¾ÒÔÉÏ£ºArrayList<ListView> lw = s olo.getCurrentViews(ListView.class);

»¹ÓÐÈ磺

ArrayList<ImageView> imageList =solo.getCurrentViews(ImageView.class);µÃµ½µÄ¼´ÊÇImageView

ArrayList<ImageView> imageList= solo.getCurrentViews (ImageView.class,parentView);

8.ÈçºÎ»ñÈ¡¿Ø¼þID-Á½ÖÖ·½·¨

£¨1£©Android ʵÓù¤¾ßHierarchy Viewerʵս

ÊÇËæAndroidSDK·¢²¼µÄ¹¤¾ß£¬Î»ÖÃÔÚtoolsÎļþ¼ÐÏ£¬ÃûΪhierarchyviewer.bat

ÐèÒªÔËÐвâÊÔÏîÄ¿£¬ÔÚµ÷ÊÔ»·¾³Ï²ſÉÒÔ¼ì²âµ½Ä£ÄâÆ÷µÄ

£¨2£©ÔËÐÐÃüÁîÐмǼlog£¬È»ºóµã»÷¶ÔÓ¦Activity£¬½Ó×Å¿ÉÒÔÔÚlogcat¿´µ½

   
7252 ´Îä¯ÀÀ       29
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì