Googleå¨sdk4.0以åæä¾äºä¸ä¸ªèªå¨å解å³æ¹æ¡uiautomatorï¼
ä¼ç¹ï¼å¯ä»¥è·¨åºç¨äºï¼è¿å¯æ¯äº²ççï¼
缺ç¹ï¼å¿ é¡»sdk4.0以ä¸çæ¬ï¼è¦æ³å®ç°ç好ï¼æ好æå¼åé åï¼java项ç®ç¼è¯ä¸ºjaråéè¦pushå°ææºæè½è¿è¡ï¼ä¹å°±æ¯è¯´å¿ é¡»æå°æ¥å¿æ´åè°è¯ã
AppiumåºäºAndroid InstrumentationFrameworkåUIAutomatorï¼ä¹å°±æ¯è¯´è¿ä¸ªå·¥å
·æ¯å¯ä»¥è·¨åºç¨çã说è¿äºï¼å¥½å§ï¼ä¸ºäºå¸®å¤§å®¶æ´å®¹æç解appiumç使ç¨ï¼æè¿é就讲ä¸ä¸uiautomatorç使ç¨æ¹æ³ã
ä½ åºè¯¥æandroid-sdkå§ï¼å级å°4.0以ä¸ï¼è¿å ¥ç®å½android-sdk\toolsï¼ä½ ä¼çå°ä¸¤ä¸ªæ件ï¼
traceview.bat å uiautomatorviewer.batï¼è¿ä¿©æä»¶è®©ä½ æ³èµ·äºmonkeyrunneräºå§ï¼æ¯çï¼traceview.bat就对åºäºhierarchyviewer.batï¼ç¨æ¥æ¥çç¨åºçuiçé¢çï¼é常ä¹æ¯ä½¿ç¨ç®¡çåæéå¯å¨çã
好äºï¼ç°å¨ç¨eclipseå建ä¸ä¸ªjava projectï¼æ¯çï¼ä½ 没çéï¼æ¯java projectä¸æ¯android projectï¼æ·»å å¼ç¨ï¼
å¨project.propertiesä¸å 容为ï¼
# Project target.
target= android-16
è¿éçandroid-16éè¦åä¹åçandroid.jaråuiautomator.jarä½ç½®ç¸ä¸è´ã
ç¶åå¢ï¼å代ç å§ï¼å»ºç«ä¸ä¸ªç±»ï¼å¾ï¼å个ç»å¤§å®¶åèï¼
package com.uia.example.my;
import org.apache.http.util.EncodingUtils ;
import android.graphics.Bitmap ;
import android.graphics.BitmapFactory ;
import android.graphics.Rect ;
import android.os.Environment;
import com.android.uiautomator.core.UiObject;
import com.android.uiautomator.core.UiObjectNotFoundException;
import com.android.uiautomator.core.UiScrollable;
import com.android.uiautomator.core. UiSelector ;
import com.android.uiautomator.testrunner.UiAutomatorTestCase;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class TAppWorkAssistV1 extends UiAutomatorTestCase {
public String sLog ;
public File fout = null ;
public FileOutputStream outStream = null ;
public void write2file(String filename,String sData)
{
String sLog= "" ;
// åå§åæ¥å¿æ件
if (Environment. getExternalStorageState ().equals(Environment.MEDIA_MOUNTED )){
sLog = Environment. getExternalStorageDirectory().getAbsolutePath();
try {
fout = new File(sLog,filename);
outStream = new FileOutputStream( fout , true ); // æ¤å¤ç true æ¯append
sData=sData + "\n" ;
outStream .write(sData.getBytes());
outStream .flush();
outStream .close();
fout = null ;
}
catch (Exception e){
e.printStackTrace();
}
} else {
System. out .println( " 该ææºæ²¡æ SD å¡ " );
}
}
public void testDemo() throws UiObjectNotFoundException {
//1. å¯å¨ app
getUiDevice().pressHome();
UiObject allAppsButton = new UiObject( newUiSelector().description( "Apps" ));
allAppsButton.clickAndWaitForNewWindow();
UiObject appsTab = new UiObject( new UiSelector().text( "Apps" ));
appsTab.click();
UiScrollable appViews = new UiScrollable( newUiSelector().scrollable( true ));
UiObject settingsApp = appViews.getChildByText( newUiSelector().className(android.widget.TextView. class .getName()), "Efilm" );
settingsApp.clickAndWaitForNewWindow();
//2. è¿å ¥ä¸»çé¢
System. out .println( "into main view" );
System. out .println(getUiDevice().waitForWindowUpdate("com.eshore.efilm" , 60000));
System. out .println( "intoed main view" );
UiObject tv1 = new UiObject( new UiSelector().text( " å½±é¢ " ));
tv1.click();
//3. ç¹å»å½±é¢
UiObject oyy= new UiObject( new UiSelector().description("cinema_row" ));
System. out .println( "wait yingyuan come out" );
oyy.waitForExists(60000);
System. out .println( "yingyuan come out" );
oyy.clickAndWaitForNewWindow();
System. out .println( "click yingyuan" );
//4. åºæ¬¡
UiObject occ= new UiObject( new UiSelector().description("LinearLayout10" ));
System. out .println( "wait changci come out" );
oyy.waitForExists(60000);
System. out .println( "changci come out" );
occ.clickAndWaitForNewWindow();
System. out .println( "click changci" );
//5. 座ä½
UiObject oseat= new UiObject( new UiSelector().description("cinema_shows_list_item" ).index(0).childSelector( newUiSelector().description( "LinearLayout10" )));
System. out .println( "wait seat come out" );
oseat.waitForExists(5000);
int h=getUiDevice().getDisplayHeight();
int w=getUiDevice().getDisplayWidth();
System. out .println( "(h/2,w/2)=" +h/2+ "," +w/2);
getUiDevice().click(h/2,w/2);
//System.out.println("seat count:"+String.valueOf(oseat.getChildCount()));
//System.out.println("seat getText:"+ oseat.getText());
// æªåº§ä½å¾
Process process;
try {
process = Runtime. getRuntime ().exec( "screencap /mnt/sdcard/EfilmFailSnapShot01.png" );
try {
process.waitFor();
} catch (InterruptedException e) { // TODO Auto-generated catch block
e.printStackTrace();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//takeScreenShots("EfilmSeatSnapShot");
}
}
è¿ä¸ªä¾åæ¯é便åçï¼å¯è½ä¸å¤ä¸¥è°¨ã大ä½å°±è¿ä¹ä¸ªæ åµå§ãä¸ä¸æ¥å°±æ¯ç¼è¯æ§è¡äºï¼å æä¸ææºusbæ¥å£ï¼ç¶åæå¼cmdï¼æ§è¡ï¼
æ¾å°SDKIDï¼ä¹å°±æ¯android createä¸ç-tåæ°:
cd C:\ PROGRAM\android-sdk\tools
android list
æ¾å°tåæ°çå¼ä»¥åï¼
cd C:\ PROGRAM\android-sdk\tools
android create uitest-project -n TAppWorkAssistV1 -t 25 -p C:\androidèªå¨å\Tv2.0\TestSetting
cd C:\androidèªå¨å\Tv2.0\TestSetting
ant build
cd C:\androidèªå¨å\Tv2.0\TestSetting\bin
adb push TAppWorkAssistV1.jar /data/local/tmp/
adb shell uiautomator runtest TAppWorkAssistV1.jar -c com.uia.example.my. TAppWorkAssistV1
çäºçï¼å¥½å没æä»ä¹ç¹å«å¼å¾è§£éç
-n TAppWorkAssistV1ï¼ç±»å
-p: 项ç®æå¨ç®å½
Ant build æè¿ä¸ªç±»ç¼è¯æä¸ä¸ªjarå ï¼TAppWorkAssistV1.jar
ç¶åæjarå pushå°ææºä¸ï¼è°ç¨æ§è¡è¿ä¸ªç±»å°±å¯ä»¥äº
大è´æ¯è¿ä¹ä¸ªæ¥éª¤ï¼ä¸è¿æä¸ä¸ªé常éè¦çç»èï¼å°±æ¯å¦æä½ éè¦æ´çå¿ï¼å°±æ好æçé¢å ç´ ï¼æ 论å¨æçè¿æ¯å¸å±æ件ä¸çï¼é½å ä¸content-descriptionå±æ§ï¼å¹¶ä¿è¯å¯ä¸æ§ï¼æ ¹æ®ï¼
UiSelector:description(String desc)
Set the search criteria to match thecontent-description property for a widget.
é£å°±å¯ä»¥ç»ä¸åªä½¿ç¨è¿ä¸ä¸ªå¼ç¨çé¢å ç´ çæ¹æ³å°±è¡äºï¼å°±ä¸ç¨å»æ³æ¹è®¾æ³å©ç¨å ¶å®çå±æ§æ¥å¼ç¨äºã