Cuando se utiliza Android UIAutomator para pruebas automáticas, ¿cómo conectarse a un dispositivo real?
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.