Red de conocimiento informático - Descarga de software - Cuando se utiliza Android UIAutomator para pruebas automáticas, ¿cómo conectarse a un dispositivo real?

Cuando se utiliza Android UIAutomator para pruebas automáticas, ¿cómo conectarse a un dispositivo real?

Google proporcionó la solución de automatización uiautomator después de sdk4.0:

Ventajas: se puede utilizar en todas las aplicaciones;

Desventajas: se requiere sdk4.0 o superior; Si se implementa bien, es mejor contar con cooperación para el desarrollo; después de compilar el proyecto Java en un jar, debe enviarse al teléfono móvil para ejecutarse, lo que significa que se deben imprimir registros para una depuración violenta.

Appium se basa en Android Instrumentation Framework y UIAutomator, lo que significa que esta herramienta se puede aplicar de forma cruzada. Eso está muy lejos. Bueno, para ayudar a todos a comprender el uso de appium más fácilmente, hablaré sobre el uso de uiautomator aquí.

Deberías tener un SDK de Android. Actualice a 4.0 o superior e ingrese al directorio android-sdk\tools. Verás dos archivos:

Traceview.bat y uiautomatorviewer.bat. Estos dos archivos te recuerdan a Monkeyrunner, ¿verdad? traceview.bat corresponde a jerarquíaviewer.bat, que se utiliza para ver la interfaz UI del programa. Generalmente se inicia con derechos de administrador.

Bien, ahora usa eclipse para crear un proyecto java. Sí, has leído bien. Es un proyecto de Java, no un proyecto de Android. Agregar referencia:

En project.properties, el contenido es:

#Objetivo del proyecto.

Objetivo=? android-16

El Android-16 aquí debe estar en la misma ubicación que el android.jar y uiautomator.jar anteriores

Luego escriba el código, cree una clase y envíe a todos como referencia:

¿Paquete? com. UIA. ejemplo. mi;

¿Importar? org.apache..Android .ui automator .core .ui objeto;

¿Importar? com .Android .ui automator .core uiobjectnotfoundexception;

¿Importar? com. Android. ui automator. core. ui con capacidad de desplazamiento;

¿Importar? ¿com.android.uiautomator.core? ¿UiSelector? ;

¿Importado? com .Android .ui automator .ejecutador de pruebas .uiautomatortestcase;

¿Importar? Archivo Java .io;

¿Importar? Java .io . flujo de salida del archivo;

¿Importar? Java io . io excepción;

¿Público? ¿clase? tapworkassistv 1 se extiende? ¿UiAutomatorTestCase? {

¿Público? ¿Cadena? ¿sudar tinta? ;

¿Público? ¿documento? ¿fuera? =?nulo? ;

¿Público? ¿FileOutputStream? ¿salida? =?nulo? ;

¿Público? ¿Vacío? write2file(nombre de archivo de cadena, String sData)

{

String sLog=? ""?;

//?Inicializar el archivo de registro

¿Si? (Entorno.?getExternalStorageState?().equals(Environment.MediaInstall?)) {

sLog = Entorno. ? getExternalStorageDirectory(). getAbsolutePath();

¿Probar? {

¿fuera? =?Nuevo? Archivo(sLog, nombre de archivo);

¿Salida? =?Nuevo? FileOutputStream(?fout?,?¿en serio?);? //?¿Aquí? ¿En realidad? ¿Se añade

sData=sData? "\n"? ;

¿Salida? . write(sdata . getbytes());

¿Salida? . flush();

¿Salida? . close();

fuera? =?nulo? ;

}

¿Capturar? (Excepción e){

e . printstacktrace();

}

} ¿De lo contrario? {

Sistema. ? ¿Afuera? . println(?"?¿Este teléfono tiene? ¿SD? ¿Tarjeta?"?);

}

}

¿Público? ¿Vacío? pruebaDemo()? ¿Dejar caer? UiObjectNotFoundException {

? //1.? ¿comenzar? Aplicación

getUiDevice().

presione home();

UiObject allAppsButton =? ¿Nuevo? UiObject(? newUiSelector(). Descripción(? "Aplicación"?));

botón de todas las aplicaciones. Haga clic y espere a una nueva ventana();

Pestaña de aplicaciones UiObject =? ¿Nuevo? UiObject(? nuevo ? UiSelector(). body(? "aplicación"?));

appstab click()

UiScrollable appViews = ? ¿Nuevo? UiScrollable(?newUiSelector().Scrollable(?Really?));

Configuración del objeto UI aplicación = aplicación views.getchildbytext(?newUiSelector().nombre de clase(Android.widget.textview?class ?.getName ()),?"movie");

configuración app.clickandwaitfornewwindow();

//2.? Ingresa a la interfaz principal

Sistema. ? ¿Afuera? . println(?"Ingresar a la vista principal"?);

System. ? ¿Afuera? . println(getUiDevice().waitforwindowwupdate(" com . eshore . efilm "?, 60000));

System. ? ¿Afuera? . println(?"ingreso a la vista principal"?);

UiObject tv1 =? ¿Nuevo? UiObject(?new?UiSelector().text(??cinema?"?));

TV 1. clic();

? //3.? Haz clic en Cine

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

System. ? ¿Afuera? . println(?"¿Esperando a que salga Yingyuan"?);

oyy.waitforexists(60000);

System. ? ¿Afuera? . println(?"Yingyuan sale"?);

oyy.clickandwaitfornewwindow();

System. ? ¿Afuera? . println(?"Haga clic en Yingyuan"?);

? //4.? El número de proyecciones de una película

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

System. ? ¿Afuera? . println(? "Esperando a que salga la letra"?);

oyy.waitforexists(60000);

System. ? ¿Afuera? . println(?"Chang Ci sale"?);

OCC . ? ¿Afuera? . println(?"Haga clic en la letra"?);

? //5.? Asiento

UiObject oseat=? ¿Nuevo? UiObject(? nuevo ?UiSelector().

descripción("cinema_shows_list_item"?).index(0). childSelector(?newUiSelector(). descripción(?" LinearLayout10"?)));

System. ? ¿Afuera? . println(?"Esperar a que salgan los asientos"?);

ose en esperar a que exista(5000);

? int? h=getUiDevice(). getDisplayHeight();

? int? w=getUiDevice(). getDisplayWidth();

System. ? ¿Afuera? . println(?"(h/2,w/2)="?h/2?","?w/2);

getUiDevice(). Haga clic(h/2,w/2);

? //sistema . out . println(" recuento de asientos: " cadena . valor de(ose en . obtener recuento de niños()));

? //sistema . out . println(" asiento getText:" ose en . getText()

? //Vista transversal

Flujo del proceso;

? ¿Probarlo? {

Proceso = tiempo de ejecución. ? obtener tiempo de ejecución? ().exec(?" screen cap/mnt/SD card/efilmfailsnapshot 01 . png "?);

? ¿Probarlo? {

proceso. esperar();

}?¿Capturar? (interrupción excepción e) {? //?¿Hacer? ¿Bloque de captura generado automáticamente

e. printstacktrace();

}

}? (IOException e) {

? //?¿Hacer? Bloque de captura generado automáticamente

e. printstacktrace();

}

? //tomar instantánea(" EfilmSeatSnapShot ");

}

}

Este ejemplo está escrito de manera muy informal y puede que no sea lo suficientemente riguroso. Probablemente sea eso. El siguiente paso es compilar y ejecutar. Primero conecte la interfaz USB del teléfono, luego abra cmd y ejecute:

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

cd C:\PROGRAM\android-sdk\tools

lista de android

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

cd C:\ PROGRAM\android-sdk\tools

Android crea ui test-project-n tappworassistv 1-T25-p c:\Androidautomation\TV 2.0\test settings.

CD C:\Android Automation\TV 2.0\test settings

ant build

CD C:\Android Automation\TV 2.0\test settings\bin

ADB push tappworassistv 1 .jar/data/local/tmp/

ADB shell ui automator runtest tappworassistv 1 . >

Después de mirarlo, parece que no hay nada particularmente que valga la pena explicar.

-n tapworkassistv1: Nombre de la clase

-p: El directorio donde se encuentra el proyecto.

Ant build compila esta clase en un paquete jar: tapworassistv 1. jar

Luego, envíe el paquete jar al teléfono móvil para llamar y ejecutar esta clase.

Este es más o menos el mismo paso, pero hay un detalle muy importante, es decir, si necesitas preocuparte más, será mejor que agregues el atributo content-description a los elementos de la interfaz, ya sea dinámico o en el archivo de diseño, para garantizar la unicidad, de acuerdo con:

UiSelector: descripción (cadena desc)

Establezca los criterios de búsqueda para que coincidan con el atributo de descripción de contenido del widget.

Luego puedes unificar el método de usar solo este elemento de la interfaz, sin intentar hacer referencia a él con otros atributos.