Clase 33: Sube cuando lo veas, el uso de Appium

En esta clase, aprendemos principalmente a usar Appium.

Appium es una herramienta de prueba automatizada móvil multiplataforma que puede crear fácilmente casos de prueba automatizados para plataformas iOS y Android. Puede simular varias operaciones dentro de la aplicación, como hacer clic, deslizar, ingresar texto, etc., siempre que operemos manualmente Appium puede completarlo. Hemos aprendido sobre Selenium antes, es una herramienta de prueba automatizada del lado web. Appium en realidad hereda Selenium, y Appium también usa WebDriver para implementar pruebas automatizadas de App. Para dispositivos iOS, Appium usa UIAutomation para implementar controladores. Para Android, usa UiAutomator y Selendroid para implementar el controlador.

Appium es equivalente a un servidor, podemos enviar algunas instrucciones de funcionamiento a Appium, y Appium manejará el dispositivo móvil de acuerdo con diferentes instrucciones para realizar diferentes acciones.

Para los rastreadores, utilizamos Selenium para rastrear páginas renderizadas en JavaScript, que se pueden rastrear cuando están visibles. Appium también se puede utilizar como rastreador de aplicaciones. Es una buena opción.

Entendamos el uso básico de Appium.

Objetivos de esta sección

Usamos un apk de ejemplo en la plataforma Android para demostrar el método de Appium para iniciar y operar una Aplicación. El propósito principal es comprender el proceso de pruebas automatizadas usando Appium y el uso de las API relacionadas.

Listo para trabajar

Asegúrese de que Appium, el entorno de desarrollo de Android y la versión Python de la API de Appium se hayan instalado en su PC. Para conocer el método de instalación, consulte https://cuiqingcai.com/5407.html . Además, el paquete de instalación de muestra está instalado en el teléfono Android y la dirección de descarga es: https://app5.scrape.center/ .

Inicie la aplicación

Hay dos formas de que Appium inicie una aplicación: una es usar el disco integrado de Appium para abrir la aplicación y la otra es usar un programa Python para lograr esta operación. Lo explicaremos por separado a continuación.

Primero abra Appium, la interfaz de inicio es como se muestra en la figura.
Inserte la descripción de la imagen aquí
Simplemente haga clic en el botón Iniciar servidor para iniciar el servicio Appium, que equivale a iniciar un servidor Appium. Podemos enviar una serie de instrucciones de funcionamiento al servidor de Appium a través del controlador integrado de Appium o el código Python, y Appium conducirá el dispositivo móvil de acuerdo con diferentes instrucciones para completar diferentes acciones. La interfaz en ejecución después del inicio es como se muestra en la figura.
Inserte la descripción de la imagen aquí
Appium está escuchando en el puerto 4723 después de ejecutarse. Podemos enviar instrucciones de operación a la interfaz de servicio correspondiente a este puerto, y esta página mostrará el registro de operación de este proceso.

Conecte el teléfono Android a la PC que ejecuta Appium a través del cable de datos y encienda la función de depuración USB para asegurarse de que la PC se pueda conectar al teléfono.

Puede ingresar el comando adb para probar la conexión, como se muestra a continuación:

adb devices -l

Si aparece un resultado similar al siguiente, significa que la PC se ha conectado correctamente al teléfono.

List of devices attached
emulator-5554          device product:cancro model:MuMu device:x86 transport_id:231

El primer campo es el nombre del dispositivo, que es la variable deviceName que se utilizará más adelante. Estoy usando un emulador, por lo que el nombre aquí es emulator-5554.

Si se le indica que no se puede encontrar el comando adb, verifique si el entorno de desarrollo de Android y las variables de entorno están configurados correctamente. Si el comando adb se puede llamar correctamente pero no se muestra la información del dispositivo, verifique la conexión entre el teléfono móvil y la PC.

A continuación, utilice la unidad integrada de Appium para abrir la aplicación y haga clic en el botón Iniciar nueva sesión en Appium, como se muestra en la figura.

Inserte la descripción de la imagen aquí
Aparecerá una página de configuración, como se muestra en la figura.
Inserte la descripción de la imagen aquí
Debe configurar los parámetros de Capacidades deseadas al iniciar la aplicación. Son platformName, deviceName, appPackage y appActivity.

  • platformName: el nombre de la plataforma, que debe distinguirse entre Android e iOS. Complete Android aquí.
  • deviceName: nombre del dispositivo, que es el tipo específico de teléfono móvil.
  • appPackage: nombre del paquete de la aplicación.
  • appActivity: el nombre de la actividad de entrada, que generalmente comienza con.
  • noReset: No restablezca la sesión al abrir la aplicación, establezca en true aquí.

También hay una descripción de los parámetros de configuración en la esquina inferior izquierda de la página de configuración actual. El enlace es https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/caps.md .

Agregamos las 5 configuraciones anteriores a Appium, como se muestra en la figura.
Inserte la descripción de la imagen aquí
Haga clic en el botón Guardar, guárdelo, podemos seguir usando esta configuración en el futuro.

Haga clic en el botón Iniciar sesión en la esquina inferior derecha para iniciar la aplicación en el teléfono Android e ingresar a la página de inicio. Al mismo tiempo, aparecerá una ventana de depuración en la PC, desde la cual podemos obtener una vista previa de la página móvil actual y ver el código fuente de la página, como se muestra en la figura.
Inserte la descripción de la imagen aquí
Haga clic en un elemento de la pantalla en la columna de la izquierda, si se selecciona un elemento, se resaltará. En este momento, la columna del medio muestra el código fuente correspondiente al elemento seleccionado actualmente, y la columna de la derecha muestra la información básica del elemento, como id del elemento, clase, texto, etc., así como las operaciones que se pueden realizar, como Tap, Send Keys, Clear , como muestra la imagen.
Inserte la descripción de la imagen aquí
Haga clic en el tercer botón de grabación en la parte superior de la columna del medio, Appium comenzará a registrar la acción de la operación, luego se registrará el comportamiento de operación de la aplicación en la ventana y el código de idioma correspondiente se puede generar automáticamente en la grabadora. Por ejemplo, hacemos clic en el botón de grabación, luego seleccionamos uno de los elementos y hacemos clic en la operación Tap para simular la función de clic del botón. En este momento, el teléfono móvil y la aplicación de ventana saltarán a la página de detalles correspondiente, y la columna del medio mostrará el código correspondiente a esta acción. , como muestra la imagen.
Inserte la descripción de la imagen aquí
Podemos hacer clic en diferentes botones de acción en esta página para controlar la aplicación, y la parte Grabadora también puede generar el código Python correspondiente.

Echemos un vistazo al método de usar el código Python para impulsar la aplicación. Primero, debe especificar un servidor de Appium en el código, y este servidor ya estaba encendido cuando abrió Appium hace un momento. Se ejecuta en el puerto 4723. La configuración es la siguiente:

server = 'http://localhost:4723/wd/hub'

Utilice un diccionario para configurar los parámetros de las capacidades deseadas, el código es el siguiente:

desired_caps = {
    
    
    'platformName': 'Android',
    'deviceName': 'emulator-5554',
    'appPackage': 'com.goldze.mvvmhabit',
    'appActivity': '.ui.MainActivity'
}

Cree una nueva sesión, que es similar a hacer clic en el botón Iniciar sesión del controlador integrado de Appium. La implementación del código es la siguiente:

from appium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
​
driver = webdriver.Remote(server, desired_caps)

Ejecutar después de que se complete la configuración, puede iniciar la aplicación. Pero ahora solo puedo iniciar la aplicación y aún no he hecho nada.

Luego use el código para simular las dos acciones que se acaban de demostrar: haga clic en un elemento y luego regrese.

Eche un vistazo al código Python generado por la grabadora en la unidad integrada de Appium. El código generado automáticamente es muy engorroso. Por ejemplo, hacer clic en un elemento y devolver el código es el siguiente:

el1 = driver.find_element_by_xpath("/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.RelativeLayout/android.support.v7.widget.RecyclerView/android.widget.LinearLayout[2]")
el1.click()
driver.back()

Vamos a ordenarlo y modificarlo un poco, y luego agregar la operación para obtener el texto, el código completo es el siguiente:

from appium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
​
server = 'http://localhost:4723/wd/hub'
desired_caps = {
    
    
    'platformName': 'Android',
    'deviceName': 'emulator-5554',
    'appPackage': 'com.goldze.mvvmhabit',
    'appActivity': '.ui.MainActivity',
    'adbExecTimeout': 200000,
}
driver = webdriver.Remote(server, desired_caps)
wait = WebDriverWait(driver, 1000)
item_element = wait.until(EC.presence_of_element_located(
    (By.XPATH, '//android.support.v7.widget.RecyclerView/android.widget.LinearLayout[2]')))
item_title_element = item_element.find_element_by_xpath('//android.widget.TextView')
text = item_title_element.text
print('text', text)
item_element.click()
driver.back()

Ejecute este código, luego podrá observar que la aplicación aparece primero en el teléfono, luego simula hacer clic en uno de los elementos y luego regresa a la página de inicio. Al mismo tiempo, también se emite el texto del nodo extraído.
De esta manera, hemos implementado con éxito la operación de la aplicación utilizando código Python.

API

A continuación, echemos un vistazo a cómo usar el código para operar la aplicación y resumamos el uso de las API relacionadas. La biblioteca de Python utilizada aquí es AppiumPythonClient, y su dirección de GitHub es https://github.com/appium/python-client. Esta biblioteca se hereda de Selenium y tiene mucho en común con Selenium.

inicialización

Es necesario configurar los parámetros de Capacidades deseadas. Para obtener instrucciones de configuración completas, consulte https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/caps.md . En términos generales, configuramos algunos conceptos básicos Los parámetros pueden ser:

from appium import webdriver
​
server = 'http://localhost:4723/wd/hub'
desired_caps = {
    
    
    'platformName': 'Android',
    'deviceName': 'emulator-5554',
    'appPackage': 'com.goldze.mvvmhabit',
    'appActivity': '.ui.MainActivity'
}
driver = webdriver.Remote(server, desired_caps)

Las capacidades deseadas para iniciar la aplicación se configuran aquí, de modo que Appium encontrará automáticamente el nombre del paquete y la clase de entrada en el teléfono y luego lo iniciará. El nombre del paquete y el nombre de la clase de entrada se pueden obtener del archivo AndroidManifest.xml del paquete de instalación.

Si la aplicación que se va a abrir no se ha instalado en el teléfono de antemano, podemos especificar directamente el parámetro de la aplicación como la ruta del paquete de instalación, de modo que cuando el programa se inicie, se instalará e iniciará automáticamente la aplicación en el teléfono, como se muestra a continuación:

from appium import webdriver
server = 'http://localhost:4723/wd/hub'
desired_caps = {
    
    
    'platformName': 'Android',
    'deviceName': 'emulator-5554',
    'app': './app.apk'
}
driver = webdriver.Remote(server, desired_caps)

Cuando el programa se inicia, buscará el paquete de instalación de apk en la ruta actual de la PC, luego lo instalará en el teléfono y lo iniciará.

Encontrar elemento

Podemos usar el método de búsqueda general en Selenium para encontrar elementos, como se muestra a continuación:

el = driver.find_element_by_id('com.package.name:id/path')

En Selenium, también son aplicables otros métodos para encontrar elementos, por lo que no los repetiré aquí.
En la plataforma Android, también podemos usar UIAutomator para seleccionar elementos, como se muestra a continuación:

el = self.driver.find_element_by_android_uiautomator('new UiSelector().description("Animation")')
els = self.driver.find_elements_by_android_uiautomator('new UiSelector().clickable(true)')

En la plataforma iOS, podemos usar UIAutomation para seleccionar elementos de la siguiente manera:

el = self.driver.find_element_by_ios_uiautomation('.elements()[0]')
els = self.driver.find_elements_by_ios_uiautomation('.elements()')

También puede usar Predicados de iOS para seleccionar elementos, como se muestra a continuación:

el = self.driver.find_element_by_ios_predicate('wdName == "Buttons"')
els = self.driver.find_elements_by_ios_predicate('wdValue == "SearchBar" AND isWDDivisible == 1')

También puede usar la Cadena de clases de iOS para seleccionar, como se muestra a continuación:

el = self.driver.find_element_by_ios_class_chain('XCUIElementTypeWindow/XCUIElementTypeButton[3]')
els = self.driver.find_elements_by_ios_class_chain('XCUIElementTypeWindow/XCUIElementTypeButton')

Pero este método solo es aplicable al controlador XCUITest, consulte https://github.com/appium/appium-xcuitest-driver para obtener más detalles .

Haga clic en

Tap puede usar el método de tap, que puede simular un toque de dedo (hasta cinco dedos), y puede establecer la duración (milisegundos). El código es el siguiente:

tap(self, positions, duration=None)

parámetro:

  • posiciones, una lista de posiciones en las que se hizo clic.
  • duración, haga clic en la duración.

Los ejemplos son los siguientes:

driver.tap([(100, 20), (100, 60), (100, 100)], 500)

Esto puede simular hacer clic en ciertos puntos de la pantalla.
Además, para un elemento como un botón, podemos llamar directamente al método cilck para simular un clic. El ejemplo es el siguiente:

button = find_element_by_id('com.tencent.mm:id/btn')
button.click()

Después de obtener el elemento de esta manera, llame al método de clic para realizar el clic simulado del elemento.

Arrastre de pantalla

Puede utilizar el método de desplazamiento para simular el desplazamiento de la pantalla, el uso es el siguiente:

scroll(self, origin_el, destination_el)

Puede desplazarse desde el elemento origin_el hasta el elemento destination_el.

parámetro:

  • original_el, el elemento que se está manipulando.
  • destination_el, el elemento de destino.

Los ejemplos son los siguientes:

driver.scroll(el1,el2)

También podemos usar deslizar para simular el deslizamiento del punto A al punto B, el uso es el siguiente:

swipe(self, start_x, start_y, end_x, end_y, duration=None)

parámetro:

  • start_x, la abscisa de la posición inicial.
  • start_y, la ordenada de la posición inicial.
  • end_x, la abscisa de la posición final.
  • end_y, la ordenada de la posición final.
  • duración, duración, milisegundos.

Los ejemplos son los siguientes:

driver.swipe(100, 100, 100, 400, 5000)

De esta manera, puede deslizarse de (100,100) a (100,400) en 5 segundos.
Además, puede utilizar el método de movimiento rápido para simular un deslizamiento rápido del punto A al punto B. El uso es el siguiente:

flick(self, start_x, start_y, end_x, end_y)

parámetro:

start_x, la abscisa de la posición inicial.
start_y, la ordenada de la posición inicial.
end_x, la abscisa de la posición final.
end_y, la ordenada de la posición final.

Los ejemplos son los siguientes:

driver.flick(100, 100, 100, 400)

Arrastrar

Puede usar drag_and_drop para arrastrar un elemento a otro elemento de destino.

El uso es el siguiente:

drag_and_drop(self, origin_el, destination_el)

El elemento origin_el se puede arrastrar al elemento destination_el.

parámetro:

  • original_el, el elemento que se arrastra.
  • destination_el, el elemento de destino.

Los ejemplos son los siguientes:

driver.drag_and_drop(el1, el2)

Entrada de texto

Puede utilizar el método set_text para implementar la entrada de texto, como se muestra a continuación:

el = find_element_by_id('com.tencent.mm:id/cjk')
el.set_text('Hello')

Después de seleccionar un elemento de cuadro de texto, llamamos al método set_text para lograr la entrada de texto.

Cadena de acción

Similar a ActionChains en Selenium, TouchAction en Appium admite tocar, presionar, presionar largamente, soltar, mover a, esperar, cancelar, etc. Los ejemplos son los siguientes:

el = self.driver.find_element_by_accessibility_id('Animation')
action = TouchAction(self.driver)
action.tap(el).perform()

Primero seleccione un elemento y luego use TouchAction para lograr operaciones de clic.
Si desea implementar la operación de arrastre, puede utilizar los siguientes métodos:

els = self.driver.find_elements_by_class_name('listView')
a1 = TouchAction()
a1.press(els[0]).move_to(x=10, y=0).move_to(x=10, y=-75).move_to(x=10, y=-600).release()
a2 = TouchAction()
a2.press(els[1]).move_to(x=10, y=10).move_to(x=10, y=-300).move_to(x=10, y=-600).release()

Usando la API anterior, podemos completar la mayoría de las operaciones.
Para obtener más operaciones de API, consulte https://testerhome.com/topics/3711 .

Conclusión

En esta sección, entendemos principalmente el uso básico de la aplicación de operación de Appium y el uso de API comunes. Utilizándolo, podemos visualizar la aplicación y extraer información de la página como Selenium.

Supongo que te gusta

Origin blog.csdn.net/weixin_38819889/article/details/108632334
Recomendado
Clasificación