View a markdown version of this page

Interactuar con el dispositivo mediante Appium - AWS Device Farm

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Interactuar con el dispositivo mediante Appium

Una vez que haya creado una sesión de acceso remoto, el dispositivo estará disponible para las pruebas de Appium. Durante toda la sesión de acceso remoto, puedes ejecutar tantas sesiones de Appium como desees en el dispositivo, sin límites en cuanto a los clientes que utilices. Por ejemplo, puede empezar por ejecutar una prueba con el código Appium local de su IDE y, a continuación, pasar a utilizar el Inspector de Appium para solucionar cualquier problema que encuentre. La sesión puede durar hasta 150 minutos; sin embargo, si no hay actividad durante más de 5 minutos (ya sea a través de la consola interactiva o del terminal de Appium), se agotará el tiempo de espera de la sesión.

Uso de aplicaciones para realizar pruebas con tu sesión de Appium

Hay varias formas de proporcionar una aplicación para usarla con tu sesión de Appium:

  • Sube una aplicación a Device Farm e instálala en la sesión.

  • Especifique una URL HTTPS o un URI de Amazon S3 como appium:app capacidad.

  • Haga referencia a una aplicación ya instalada por su nombre de paquete (appium:appPackageen Android o appium:bundleId iOS).

  • Pruebe una aplicación web especificando la browserName capacidad (Chromeen Android o iOS). Safari

Los límites de tamaño estándar de las aplicaciones (4 GB) se aplican a todas las fuentes de aplicaciones.

nota

Device Farm no admite el paso de una ruta de sistema de archivos local appium:app durante una sesión de acceso remoto.

Carga, instalación y uso de aplicaciones

Para usar una aplicación cargada con tu sesión de Appium, sigue estos pasos:

  1. Carga e instala tu aplicación

    Hay dos formas de cargar e instalar una aplicación en el dispositivo que se está probando:

    • Incluye el ARN de la aplicación en tu solicitud. CreateRemoteAccessSession La aplicación se instala automáticamente en el dispositivo cuando se inicia la sesión. También puede incluir una aplicación auxiliar ARNs, que se instalará junto con la aplicación principal.

    • Instale la aplicación durante una sesión activa mediante la InstallToRemoteAccessSessionAPI o cárguela a través de la consola Device Farm. Esto le permite cambiar la aplicación que se está probando sin crear una sesión nueva.

  2. Usa la aplicación instalada

    Una vez instalada, la aplicación se incorpora automáticamente como appium:app capacidad predeterminada para cualquier sesión posterior de Appium. Si ha incluido aplicaciones auxiliares, se configuran como capacidad. appium:otherApps

    Por ejemplo, si crea una sesión de acceso remoto utilizando com.aws.devicefarm.sample como aplicación y com.aws.devicefarm.other.sample como una de sus aplicaciones auxiliares, cuando vaya a crear una sesión de Appium, tendrá capacidades similares a las siguientes:

    { "value": { "sessionId": "abcdef123456-1234-5678-abcd-abcdef123456", "capabilities": { "app": "/tmp/com.aws.devicefarm.sample.apk", "otherApps": "[\"/tmp/com.aws.devicefarm.other.sample.apk\"]", ... } } }

    Si instalas una nueva aplicación durante la sesión, sustituirá a la capacidad actualappium:app. Si la aplicación instalada anteriormente tiene un nombre de paquete distinto, permanece en el dispositivo y pasa a la appium:otherApps funcionalidad.

    Por ejemplo, si inicialmente la utilizas com.aws.devicefarm.sample al crear tu sesión de acceso remoto, pero luego la instalas com.aws.devicefarm.other.sample durante la sesión, tus sesiones de Appium tendrán capacidades similares a las siguientes:

    { "value": { "sessionId": "abcdef123456-1234-5678-abcd-abcdef123456", "capabilities": { "app": "/tmp/com.aws.devicefarm.other.sample.apk", "otherApps": "[\"/tmp/com.aws.devicefarm.sample.apk\"]", ... } } }
nota

Para obtener más información sobre la carga automática de aplicaciones como parte de tu sesión de acceso remoto, consulta cómo automatizar la carga de aplicaciones.

Uso de una URL HTTPS

Puedes especificar una URL HTTPS de acceso público como la capacidad appium:app deseada al crear una sesión de Appium. La URL debe apuntar directamente a un archivo de aplicación descargable (por ejemplo, un .ipa archivo .apk o). Device Farm descarga la aplicación desde la URL especificada y la instala en el dispositivo que se está probando.

importante

Solo URLs se admite HTTPS. URLs Se rechazan los HTTP simples.

Por ejemplo, la siguiente solicitud de creación de sesión de Appium descarga una aplicación desde una URL HTTPS:

{ "capabilities": { "alwaysMatch": {}, "firstMatch": [ { "appium:app": "https://example.com/path/to/MyApp.apk" } ] } }

Uso de un URI de Amazon S3

Puede especificar un URI de Amazon S3 (por ejemplos3://my-bucket/path/to/MyApp.ipa) como la capacidad appium:app deseada al crear una sesión de Appium. Device Farm descarga la aplicación desde la ubicación S3 especificada y la instala en el dispositivo que se está probando.

Para usar un URI de S3, se deben cumplir los siguientes requisitos:

  • La sesión de acceso remoto debe iniciarse desde un proyecto que tenga configurada una función de ejecución de IAM.

  • La función de ejecución de IAM debe tener una duración máxima de sesión de al menos 150 minutos, ya que la función se asume durante la sesión de acceso remoto.

  • La función de ejecución de IAM debe tener permiso para llamar al s3:GetObject objeto S3 especificado en el URI. También recomendamos conceder s3:HeadObject permiso sobre el mismo objeto, lo que permite a Device Farm validar la existencia del objeto antes de intentar la descarga.

Por ejemplo, la siguiente solicitud de creación de sesión de Appium descarga una aplicación desde un URI de S3:

{ "capabilities": { "alwaysMatch": {}, "firstMatch": [ { "appium:app": "s3://my-test-bucket/apps/MyApp.ipa" } ] } }

El siguiente es un ejemplo de política de permisos de IAM que concede el acceso recomendado para descargar una aplicación de Amazon S3, incluido el s3:HeadObject permiso opcional. Para obtener más información sobre la configuración de las funciones de ejecución de IAM, consulte. Acceda a los recursos de AWS mediante un rol de ejecución de IAM

ejemplo
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:HeadObject" ], "Resource": "arn:aws:s3:::my-test-bucket/apps/*" } ] }

Uso de una aplicación ya instalada

Si la aplicación que quieres probar ya está instalada en el dispositivo, puedes hacer referencia a ella directamente por el nombre del paquete en lugar de subirla. Usa las appium:appActivity capacidades appium:appPackage y en Android o las appium:bundleId capacidades en iOS.

Por ejemplo, la siguiente solicitud de creación de sesión de Appium inicia una aplicación de Android ya instalada:

{ "capabilities": { "alwaysMatch": {}, "firstMatch": [ { "appium:appPackage": "com.example.myapp", "appium:appActivity": "com.example.myapp.MainActivity" } ] } }

En iOS, usa appium:bundleId en su lugar:

{ "capabilities": { "alwaysMatch": {}, "firstMatch": [ { "appium:bundleId": "com.example.myapp" } ] } }

Probar una aplicación web

Para probar una aplicación web, especifica la browserName capacidad en tu solicitud de creación de sesión de Appium. ChromeÚselo en dispositivos Safari Android o iOS.

Por ejemplo, la siguiente solicitud abre Chrome en un dispositivo Android:

{ "capabilities": { "alwaysMatch": {}, "firstMatch": [ { "browserName": "Chrome" } ] } }

Cómo usar el punto final de Appium

Estos son los pasos para acceder al punto final de Appium de la sesión desde la consola, el y el AWS CLI. AWS SDKs Estos pasos incluyen cómo empezar a ejecutar pruebas utilizando varios marcos de pruebas de clientes de Appium:

Console
  1. Abre la página de sesión de acceso remoto en tu navegador web:

    La página de sesión de acceso remoto
  2. Para ejecutar una sesión con Appium Inspector, haga lo siguiente:

    1. Haga clic en el botón Configurar sesión de Appium

    2. Siga las instrucciones de la página sobre cómo iniciar una sesión con Appium Inspector.

  3. Para ejecutar una prueba de Appium desde tu IDE local, haz lo siguiente:

    1. Haga clic en el icono de «copiar» situado junto al texto de la URL del punto de conexión de Appium

    2. Pegue esta URL en su código local de Appium donde especifique actualmente su dirección remota o ejecutor de comandos. Para ver ejemplos de idiomas específicos, haga clic en una de las pestañas de esta ventana de ejemplo para el idioma que prefiera.

AWS CLI

En primer lugar, compruebe que su versión de AWS CLI esté up-to-date disponible descargando e instalando la versión más reciente.

importante

El campo de punto final de Appium no está disponible en las versiones anteriores de la AWS CLI.

Una vez que la sesión esté activa, la URL del punto de conexión de Appium estará disponible en un campo cuyo nombre aparece remoteDriverEndpoint en la respuesta a una llamada a la API: GetRemoteAccessSession

$ aws devicefarm get-remote-access-session \ --arn "arn:aws:devicefarm:us-west-2:123456789876:session:abcdef123456-1234-5678-abcd-abcdef123456/abcdef123456-1234-5678-abcd-abcdef123456/00000"

Esto mostrará un resultado como el siguiente:

{ "remoteAccessSession": { "arn": "arn:aws:devicefarm:us-west-2:111122223333:session:abcdef123456-1234-5678-abcd-abcdef123456/abcdef123456-1234-5678-abcd-abcdef123456/00000", "name": "Google Pixel 8", "status": "RUNNING", "endpoints": { "remoteDriverEndpoint": "https://devicefarm-interactive-global.us-west-2.api.aws/remote-endpoint/ABCD1234...", ... }

Puedes usar esta URL en tu código local de Appium siempre que especifiques actualmente tu dirección remota o tu ejecutor de comandos. Para ver ejemplos de idiomas específicos, haga clic en una de las pestañas de esta ventana de ejemplo para seleccionar el idioma que prefiera.

Para ver un ejemplo de cómo interactuar con el punto final directamente desde la línea de comandos, puedes usar la herramienta de línea de comandos curl para llamar directamente al punto final: WebDriver

$ curl "https://devicefarm-interactive-global.us-west-2.api.aws/remote-endpoint/ABCD1234.../status"

Esto mostrará un resultado como el siguiente:

{ "value": { "ready": true, "message": "The server is ready to accept new connections", "build": { "version": "2.5.1" } } }
Python

Una vez que la sesión esté en marcha, la URL del punto final de Appium estará disponible en un campo denominado remoteDriverEndpoint en la respuesta a una llamada a la GetRemoteAccessSessionAPI:

# To get the URL import sys import boto3 from botocore.exceptions import ClientError def get_appium_endpoint() -> str: session_arn = "arn:aws:devicefarm:us-west-2:111122223333:session:abcdef123456-1234-5678-abcd-abcdef123456/abcdef123456-1234-5678-abcd-abcdef123456/00000" device_farm_client = boto3.client("devicefarm", region_name="us-west-2") try: resp = device_farm_client.get_remote_access_session(arn=session_arn) except ClientError as exc: sys.exit(f"Failed to call Device Farm: {exc}") remote_access_session = resp.get("remoteAccessSession", {}) endpoints = remote_access_session.get("endpoints", {}) endpoint = endpoints.get("remoteDriverEndpoint") if not endpoint: sys.exit("Device Farm response did not include endpoints.remoteDriverEndpoint") return endpoint # To use the URL from appium import webdriver from appium.options.android import UiAutomator2Options opts = UiAutomator2Options() driver = webdriver.Remote(get_appium_endpoint(), options=opts) # ... driver.quit()
Java

Nota: este ejemplo usa el AWS SDK para Java v2 y es compatible con las versiones 11 y superiores de JDK.

Una vez que la sesión esté en marcha, la URL del punto final de Appium estará disponible en un campo denominado remoteDriverEndpoint en la respuesta a una llamada a la API: GetRemoteAccessSession

// To get the URL import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.devicefarm.DeviceFarmClient; import software.amazon.awssdk.services.devicefarm.model.GetRemoteAccessSessionRequest; import software.amazon.awssdk.services.devicefarm.model.GetRemoteAccessSessionResponse; public class AppiumEndpointBuilder { public static String getAppiumEndpoint() throws Exception { String session_arn = "arn:aws:devicefarm:us-west-2:111122223333:session:abcdef123456-1234-5678-abcd-abcdef123456/abcdef123456-1234-5678-abcd-abcdef123456/00000"; try (DeviceFarmClient client = DeviceFarmClient.builder() .region(Region.US_WEST_2) .credentialsProvider(DefaultCredentialsProvider.create()) .build()) { GetRemoteAccessSessionResponse resp = client.getRemoteAccessSession( GetRemoteAccessSessionRequest.builder().arn(session_arn).build() ); String endpoint = resp.remoteAccessSession().endpoints().remoteDriverEndpoint(); if (endpoint == null || endpoint.isEmpty()) { throw new IllegalStateException("remoteDriverEndpoint missing from response"); } return endpoint; } } } // To use the URL import io.appium.java_client.android.AndroidDriver; import io.appium.java_client.android.options.UiAutomator2Options; import java.net.URL; public class ExampleTest { public static void main(String[] args) throws Exception { String endpoint = AppiumEndpointBuilder.getAppiumEndpoint(); UiAutomator2Options options = new UiAutomator2Options(); AndroidDriver driver = new AndroidDriver(new URL(endpoint), options); try { // ... your test ... } finally { driver.quit(); } } }
JavaScript

Nota: en este ejemplo se usa el AWS SDK para la versión JavaScript 3 y WebDriverIO para la versión 8+ con Node 18+.

Una vez que la sesión esté en marcha, la URL del punto final de Appium estará disponible en un campo denominado remoteDriverEndpoint en la respuesta a una llamada a la API: GetRemoteAccessSession

// To get the URL import { DeviceFarmClient, GetRemoteAccessSessionCommand } from "@aws-sdk/client-device-farm"; export async function getAppiumEndpoint() { const sessionArn = "arn:aws:devicefarm:us-west-2:111122223333:session:abcdef123456-1234-5678-abcd-abcdef123456/abcdef123456-1234-5678-abcd-abcdef123456/00000"; const client = new DeviceFarmClient({ region: "us-west-2" }); const resp = await client.send(new GetRemoteAccessSessionCommand({ arn: sessionArn })); const endpoint = resp?.remoteAccessSession?.endpoints?.remoteDriverEndpoint; if (!endpoint) throw new Error("remoteDriverEndpoint missing from response"); return endpoint; } // To use the URL with WebdriverIO import { remote } from "webdriverio"; (async () => { const endpoint = await getAppiumEndpoint(); const u = new URL(endpoint); const driver = await remote({ protocol: u.protocol.replace(":", ""), hostname: u.hostname, port: u.port ? Number(u.port) : (u.protocol === "https:" ? 443 : 80), path: u.pathname + u.search, capabilities: { platformName: "Android", "appium:automationName": "UiAutomator2", // ...other caps... }, }); try { // ... your test ... } finally { await driver.deleteSession(); } })();
C#

Una vez que la sesión esté activa, la URL del punto de conexión de Appium estará disponible en un campo denominado remoteDriverEndpoint en la respuesta a una llamada a la API: GetRemoteAccessSession

// To get the URL using System; using System.Threading.Tasks; using Amazon; using Amazon.DeviceFarm; using Amazon.DeviceFarm.Model; public static class AppiumEndpointBuilder { public static async Task<string> GetAppiumEndpointAsync() { var sessionArn = "arn:aws:devicefarm:us-west-2:111122223333:session:abcdef123456-1234-5678-abcd-abcdef123456/abcdef123456-1234-5678-abcd-abcdef123456/00000"; var config = new AmazonDeviceFarmConfig { RegionEndpoint = RegionEndpoint.USWest2 }; using var client = new AmazonDeviceFarmClient(config); var resp = await client.GetRemoteAccessSessionAsync(new GetRemoteAccessSessionRequest { Arn = sessionArn }); var endpoint = resp?.RemoteAccessSession?.Endpoints?.RemoteDriverEndpoint; if (string.IsNullOrWhiteSpace(endpoint)) throw new InvalidOperationException("RemoteDriverEndpoint missing from response"); return endpoint; } } // To use the URL using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium.Android; class Example { static async Task Main() { var endpoint = await AppiumEndpointBuilder.GetAppiumEndpointAsync(); var options = new AppiumOptions(); options.PlatformName = "Android"; options.AutomationName = "UiAutomator2"; using var driver = new AndroidDriver(new Uri(endpoint), options); try { // ... your test ... } finally { driver.Quit(); } } }
Ruby

Una vez que la sesión esté activa, la URL del punto de conexión de Appium estará disponible en un campo denominado remoteDriverEndpoint en la respuesta a una llamada a la API: GetRemoteAccessSession

# To get the URL require 'aws-sdk-devicefarm' def get_appium_endpoint session_arn = "arn:aws:devicefarm:us-west-2:111122223333:session:abcdef123456-1234-5678-abcd-abcdef123456/abcdef123456-1234-5678-abcd-abcdef123456/00000" client = Aws::DeviceFarm::Client.new(region: 'us-west-2') resp = client.get_remote_access_session(arn: session_arn) endpoint = resp.remote_access_session.endpoints.remote_driver_endpoint raise "remote_driver_endpoint missing from response" if endpoint.nil? || endpoint.empty? endpoint end # To use the URL require 'appium_lib_core' endpoint = get_appium_endpoint opts = { server_url: endpoint, capabilities: { 'platformName' => 'Android', 'appium:automationName' => 'UiAutomator2' } } driver = Appium::Core.for(opts).start_driver begin # ... your test ... ensure driver.quit end