Red de conocimiento informático - Material del sitio web - Cómo usar y depurar UIAutomator de Android

Cómo usar y depurar UIAutomator de Android

(1):

Google proporciona una solución de automatización uiautomator después de sdk4.0:

Ventajas: se puede utilizar en todas las aplicaciones, esto es natural;

Desventajas: se requiere sdk4.0 o superior; si desea implementarlo bien, es mejor tener cooperación para el desarrollo después de compilar el proyecto Java en el teléfono móvil; para ejecutarse, lo que significa que se deben imprimir registros para una depuración violenta.

Appium se basa en Android InstrumentationFramework y UIAutomator, lo que significa que esta herramienta se puede utilizar en todas las aplicaciones. Para decirlo lejos, bueno, para que sea más fácil comprender el uso de appium

(2) Cómo usar uiautomator:

Debería haber android-sdk, actualizar a 4.0 o superior, ingrese al directorio android-sdk\tools, verá dos archivos:

traceview.bat y uiautomatorviewer.bat. Estos dos archivos le recuerdan a Monkeyrunner. Sí, traceview.bat corresponde a jerarquíaviewer. .bat Se utiliza para ver la interfaz UI del programa y generalmente se inicia con privilegios de administrador.

Bien, ahora usa eclipse para crear un proyecto de Java. Sí, lo leíste bien, es un proyecto de Java, no un proyecto de Android. Agrega una referencia:

El contenido en. project.properties es:

# Objetivo del proyecto.

target= android-16

El android-16 aquí debe ser coherente con el android.jar anterior. y ubicaciones de uiautomator.jar.

(3) Referencia del código:

paquete com.uia.example.my;

import org.apache..android.uiautomator.core.UiObject;

importar com.android.uiautomator.core.UiObjectNotFoundException;

importar com.android.uiautomator.core.UiScrollable;

importar com.android.uiautomator. core.UiSelector;

importar com.android.uiautomator.testrunner.UiAutomatorTestCase;

importar java.io.File;

importar java.io.FileOutputStream;

importar java.io.IOException;

la clase pública TAppWorkAssistV1 extiende UiAutomatorTestCase {

public String sLog ;

public File fout = null ;

public FileOutputStream outStream = null ;

public void write2file(String filename,String sData)

{

String sLog= " " ;

// Inicializa el archivo de registro

if (Environment. getExternalStorageState ().equals(Environment.MEDIA_MOUNTED )){

sLog = Environment. getExternalStorageDirectory( ).getAbsolutePath();

intente {

fout = new File(sLog,filename);

outStream = new FileOutputStream( fout , true ); / Verdadero aquí es append

sData=sData + "\n" ;

outStream .write(sData.getBytes());

outStream flux(. );

outStream .close();

fout = null ;

}

captura (Excepción e){

e.printStackTrace();

}

p>

} else {

System. out .println( "Este teléfono no tiene tarjeta SD" );

}

}

public void testDemo() lanza UiObjectNotFoundException {

//1 Iniciar aplicación

getUiDevice().pressHome();

UiObject. allAppsButton = new UiObject( newUiSelector().description( "Aplicaciones" ));

allAppsButton.clickAndWaitForNewWindow();

UiObject appsTab = new UiObject( new UiSelector().text( "Aplicaciones" ));

appsTab.click();

UiScrollable appViews = new UiScrollable( newUiSelector().scrollable( true ));

UiObject settingsApp = appViews .getChildByText( newUiSelector().className(android.widget.TextView. class .getName()), "Efilm" );

settingsApp.clickAndWaitForNewWindow();

//2. Ingrese a la interfaz principal

System.out .println( "en la vista principal" );

System.println(getUiDevice().waitForWindowUpdate("com. eshore.efilm" , 60000));

System. out .println( "vista principal integrada" );

UiObject tv1 = new UiObject( new UiSelector().text( " Teatro" )) ;

tv1.click();

//3. Haz clic en el cine

UiObject oyy= new UiObject( new UiSelector() .description("cinema_row" ));

System. out .println( "espera que salga yingyuan" );

oyy.waitForExists(60000);

Sistema.

.println( "yingyuan sale" );

oyy.clickAndWaitForNewWindow();

Sistema.println( "haga clic en yingyuan" );

/ /4. Eventos

UiObject occ= new UiObject( new UiSelector().description("LinearLayout10" ));

System.println( "espera que salga changci") ;

oyy.waitForExists(60000);

System. out .println( "changci sale" );

occ.clickAndWaitForNewWindow(); p>

System.out .println( "haga clic en changci" );

//5. Seat

UiObject oseat= new UiObject( new UiSelector().description (" cinema_shows_list_item" ).index(0).childSelector( newUiSelector().description( "LinearLayout10" )));

System.println( "esperar a que salga el asiento" );

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("recuento de asientos:"+String.valueOf(oseat.getChildCount()));

// System. out.println("seat getText:"+ oseat.getText());

// Interceptar mapa de asientos

Procesar proceso;

intentar {

proceso = Runtime.getRuntime ().exec( "screencap /mnt/sdcard/EfilmFailSnapShot01.p

ng" );

prueba {

process.waitFor();

} catch (InterruptedException e) { // TODO Bloque de captura generado automáticamente

e.printStackTrace();

}

} catch (IOException e) {

// TODO Bloque de captura generado automáticamente

e.printStackTrace();

}

//takeScreenShots("EfilmSeatSnapShot");

}

}

(4) Ejecución:

Este ejemplo está escrito de manera informal y puede no ser lo suficientemente riguroso.

El siguiente paso es compilar y ejecutar. Primero conecte la interfaz USB del teléfono móvil, luego abra cmd y ejecute:

Busque el SDKID, que es el parámetro -t en Android create:

cd C:\PROGRAMA\android-sdk\tools

lista de android

Después de encontrar el valor del parámetro t:

cd C: \ PROGRAM\android-sdk\tools

android crea uitest-project -n TAppWorkAssistV1 -t 25 -p C:\androidautomation\Tv2.0\TestSetting

cd C:\ androidautomation\Tv2.0\TestSetting

ant build

cd C:\androidautomation\Tv2.0\TestSetting\bin

adb push TAppWorkAssistV1.jar /data/local/tmp/

adb shell uiautomator runtest TAppWorkAssistV1.jar -c com.uia.example.my. TAppWorkAssistV1

(5) Aspectos a tener en cuenta:

-n TAppWorkAssistV1: nombre de la clase

-p: El directorio donde se encuentra el proyecto

Ant build compila esta clase en un paquete jar: TAppWorkAssistV1.jar

Luego envíe el paquete jar al teléfono móvil. Simplemente llame y ejecute esta clase

Los pasos son más o menos así, pero hay un detalle muy importante, es decir, si necesita más. Sin preocupaciones, lo mejor es colocar los elementos de la interfaz, ya sean dinámicos o en el archivo de diseño, agregar el atributo content-description y garantizar la unicidad, de acuerdo con:

UiSelector:description(String desc)

Establezca los criterios de búsqueda para que coincidan con la propiedad content-description de un widget.

Entonces podrá usar uniformemente solo este método para hacer referencia a elementos de la interfaz, y no habrá necesidad de encontrar formas de usar otros. atributos a referencia.