Operaciones básicas de automatización¶
Este capítulo describe las funciones básicas de automatización proporcionadas por FIRERPA. Por supuesto, se describirán usos más avanzados más adelante. Este capítulo le presentará algunas de las interfaces de funciones básicas más comunes.
Obtener información del dispositivo¶
Obtiene la información del dispositivo actual, como el nombre del dispositivo, el tamaño de la pantalla, la orientación de la pantalla y la aplicación actual, entre otros datos.
d.device_info()
>>> d.device_info()
productName: "bumblebee"
sdkInt: 34
displayHeight: 2400
displaySizeDpX: 411
displaySizeDpY: 914
displayWidth: 1080
screenOn: true
naturalOrientation: true
currentPackageName: "com.android.launcher3"
>>> result = d.device_info()
>>> print (result.displayWidth)
1080
Obtener información del servicio¶
Obtiene la versión del servicio actual, el ID único del dispositivo, la versión, la ABI, entre otros datos.
d.server_info()
>>> d.server_info( )
uniqueId: "673abbe0-ff7b-9d82-1792-8876cb72cf56"
version: "8.28"
architecture: "arm64-v8a"
uptime: 293
secure: True
>>> result = d.server_info()
>>> print (result.secure)
False
Apagar la pantalla¶
La siguiente interfaz apagará la pantalla del teléfono actual, lo que equivale a presionar el botón de encendido cuando la pantalla está encendida.
d.sleep()
Encender la pantalla¶
La siguiente interfaz encenderá la pantalla del teléfono actual, lo que equivale a presionar el botón de encendido cuando la pantalla está apagada.
d.wake_up()
Verificar si la pantalla está encendida¶
Puede usar la siguiente interfaz para verificar si la pantalla del dispositivo actual está encendida, para así determinar si se puede operar.
d.is_screen_on()
Verificar si la pantalla está bloqueada¶
Puede usar la siguiente interfaz para verificar si la pantalla del dispositivo actual está desbloqueada, para así determinar si se puede operar.
d.is_screen_locked()
Mostrar un Toast¶
Puede usar la siguiente interfaz para mostrar un mensaje Toast de Hello from Lamda! en la pantalla del teléfono.
d.show_toast("Hello from Lamda!")
Leer el portapapeles¶
La siguiente interfaz se utiliza para leer el contenido actual del portapapeles del teléfono. Temporalmente no es compatible con Android 10+.
d.get_clipboard()
Escribir en el portapapeles¶
La siguiente interfaz se utiliza para escribir contenido en el portapapeles del dispositivo actual.
d.set_clipboard("Contenido del portapapeles")
Teclas físicas¶
Puede usar los siguientes métodos para simular la pulsación de teclas. Soporta más de diez tipos de teclas como KEY_BACK, KEY_DOWN, KEY_HOME, etc.
d.press_key(Keys.KEY_BACK)
d.press_key(Keys.KEY_CAMERA)
d.press_key(Keys.KEY_CENTER)
d.press_key(Keys.KEY_DELETE)
d.press_key(Keys.KEY_DOWN)
d.press_key(Keys.KEY_ENTER)
d.press_key(Keys.KEY_HOME)
d.press_key(Keys.KEY_LEFT)
d.press_key(Keys.KEY_MENU)
d.press_key(Keys.KEY_POWER)
d.press_key(Keys.KEY_RECENT)
d.press_key(Keys.KEY_RIGHT)
d.press_key(Keys.KEY_SEARCH)
d.press_key(Keys.KEY_UP)
d.press_key(Keys.KEY_VOLUME_DOWN)
d.press_key(Keys.KEY_VOLUME_MUTE)
d.press_key(Keys.KEY_VOLUME_UP)
Además, para admitir muchas otras teclas, también puede usar este método para simularlas. Puede encontrar todos los nombres de teclas compatibles en la documentación oficial de Android aquí: https://developer.android.com/reference/android/view/KeyEvent.
d.press_keycode(KeyCodes.KEYCODE_CALL)
Captura de pantalla¶
Proporcionamos un método para tomar capturas de pantalla, para que pueda registrar flujos de trabajo o realizar operaciones de reconocimiento de imágenes. La siguiente llamada se interpreta como: tomar una captura con una calidad de 60 y guardarla en el archivo screenshot.png en el directorio actual.
d.screenshot(60).save("screenshot.png")
>>> result = d.screenshot(60)
>>> result
<lamda.types.BytesIO object at 0x7a28361d60>
>>> result.save("screenshot.png")
52917
>>> result.getvalue( )
b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01....'
Actualmente, también admitimos capturas de pantalla de regiones y elementos. Las capturas de elementos no se describen en este capítulo. Aquí le presentaremos las capturas de pantalla de regiones. Necesita comprender el concepto y la definición de una región. En nuestra interfaz, una región se define con Bound, que incluye cuatro parámetros: top, left, right, bottom. El sistema de coordenadas de la pantalla de Android es diferente al de los sistemas de coordenadas convencionales; el origen está en la esquina superior izquierda de la pantalla del dispositivo, con coordenadas x=0, y=0. Supongamos que la pantalla actual está en orientación vertical con una resolución de 1080x1920. Si desea tomar una captura de pantalla completa de una región, puede hacerlo de la siguiente manera.
d.screenshot(60, bound=Bound(top=0, left=0, right=1080, bottom=1920)).save("screenshot.png")
Esto producirá una captura de pantalla completa, lo cual, por supuesto, no es necesario, ya que la captura de pantalla completa es la opción predeterminada. Entonces, si queremos capturar una imagen de 200x200 en la esquina superior izquierda, ¿cómo lo hacemos? Es muy simple, solo necesita hacer lo siguiente.
d.screenshot(60, bound=Bound(top=0, left=0, right=200, bottom=200)).save("screenshot.png")
Llegados a este punto, debemos explicar el significado de estos parámetros. En los parámetros, top representa top píxeles hacia abajo desde el eje Y, bottom representa bottom píxeles hacia abajo desde el eje Y, y left y right representan N píxeles hacia la derecha desde el eje X. top siempre es menor que bottom, y left siempre es menor que right. A continuación, demostraremos otro ejemplo: capturar una imagen de 200x200 en la esquina inferior derecha de la pantalla. Solo necesita llamar a la interfaz de la siguiente manera.
d.screenshot(60, bound=Bound(top=1920-200, bottom=1920, left=1080-200, right=1080)).save("screenshot.png")
Hacer clic en un punto de la pantalla¶
Puede simular un clic en la pantalla utilizando la siguiente interfaz. En el ejemplo, hacemos clic en el punto con coordenadas 100,100 en la pantalla.
d.click(Point(x=100, y=100))
Arrastrar desde el punto A al punto B¶
Con la siguiente interfaz, puede arrastrar un objeto desde la posición del punto A hasta el punto B, como por ejemplo, arrastrar un icono a una carpeta.
A = Point(x=100, y=100)
B = Point(x=500, y=500)
d.drag(A, B)
Deslizar desde el punto A al punto B¶
Con la siguiente interfaz, puede realizar un deslizamiento desde las coordenadas 100x100 hasta las coordenadas 500x500 en la pantalla.
A = Point(x=100, y=100)
B = Point(x=500, y=500)
d.swipe(A, B)
Deslizamiento multipunto más complejo¶
La siguiente interfaz puede simular un deslizamiento multipunto. Por ejemplo, la siguiente llamada deslizará desde 100x100 a 500x500 y luego de vuelta a 200x200. La demostración a continuación solo utiliza tres puntos, pero en realidad puede proporcionar más puntos, incluso para implementar un patrón de desbloqueo.
p1 = Point(x=100, y=100)
p2 = Point(x=500, y=500)
p3 = Point(x=200, y=200)
d.swipe_points(p1, p2, p3)
Abrir ajustes rápidos¶
La siguiente llamada puede abrir los ajustes rápidos en la pantalla, pero en un estado parcialmente abierto.
d.open_quick_settings()
Abrir la barra de notificaciones¶
La siguiente llamada puede abrir la barra de notificaciones en la pantalla.
d.open_notification()
Obtener el diseño de la página¶
La siguiente llamada puede obtener el diseño XML de la página actual. También puede analizarlo usted mismo para dar soporte a la automatización con xpath.
d.dump_window_hierarchy()
>>> result = d.dump_window_hierarchy()
>>> result
<lamda.types.BytesIO object at 0x7add660680>
>>> result.getvalue()
b'<?xml version=\'1.0\' encoding=\'UTF-8\' standalone=\'yes\' ?>\r\n<hierarchy rotation="0">\r\n <node index="0" text="" resource-id="" class="android.widget.FrameLayout" package="com.android.systemui" content-desc="" checkable="false" checked="false" clickable="false"...
Esperar a que la ventana esté inactiva¶
Puede ejecutar la siguiente llamada para esperar a que la ventana actual esté en un estado inactivo, similar a implicitly_wait de Selenium. La unidad del parámetro es milisegundos; 5*1000 representa una espera de 5 segundos. La conversión de milisegundos a segundos es de 1000.
d.wait_for_idle(5*1000)
Obtener el último Toast¶
Puede ejecutar la siguiente llamada para obtener el mensaje Toast más reciente del sistema. Sin embargo, tenga en cuenta que solo se admiten los mensajes Toast enviados a través de la API del sistema; los mensajes de interfaces de usuario similares a Toast implementados por terceros no se pueden obtener.
d.get_last_toast()
>>> result = d.get_last_toast()
>>> print (result)
timestamp: 1700000000000
package: "com.android.settings"
message: "\346\202\250\345\267\262\345\244\204\344\272\216\345\274\200\345\217\221\350\200\205\346\250\241\345\274\217\357\274\214\346\227\240\351\234\200\350\277\233\350\241\214\346\255\244\346\223\215\344\275\234\343\200\202"
>>> print (result.message)
Ya estás en modo desarrollador, no es necesario realizar esta operación.