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
Device Farm te permite usar tus aplicaciones como parte de tu solicitud de creación de sesión de acceso remoto o instalar aplicaciones durante la propia sesión de acceso remoto. Estas aplicaciones se instalan automáticamente en el dispositivo que se está probando y se incorporan como funciones predeterminadas para cualquier solicitud de sesión de Appium. Al crear una sesión de acceso remoto, tiene la opción de transferir un ARN de aplicación, que se utilizará de forma predeterminada como appium:app capacidad para todas las sesiones de Appium posteriores, así como una aplicación auxiliar ARNs, que se utilizará como capacidad. appium:otherApps
Por ejemplo, si crea una sesión de acceso remoto con una aplicación 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\"]",
...
}
}
}
Durante la sesión, puedes instalar aplicaciones adicionales (ya sea dentro de la consola o mediante la InstallToRemoteAccessSessionAPI). Estas anularán cualquier aplicación existente que se haya utilizado anteriormente como appium:app capacidad. Si esas aplicaciones utilizadas anteriormente tienen un nombre de paquete distinto, permanecerán en el dispositivo y se utilizarán como parte de la appium:otherApps capacidad.
Por ejemplo, si inicialmente usas una aplicación com.aws.devicefarm.sample al crear tu sesión de acceso remoto, pero luego instalas una nueva aplicación con el nombre 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\"]",
...
}
}
}
Si lo prefieres, puedes especificar de forma explícita las capacidades de tu aplicación mediante el nombre de la aplicación (utilizando las appium:bundleId capacidades appium:appPackage o las capacidades para Android e iOS, respectivamente).
Si estás probando una aplicación web, especifica la browserName capacidad de tu solicitud de creación de sesión de Appium. El Chrome navegador está disponible en todos los dispositivos Android y en todos los dispositivos iOS. Safari
Device Farm no admite el paso de una URL remota o una ruta del sistema de archivos local appium:app durante una sesión de acceso remoto. Cargue aplicaciones a Device Farm e inclúyalas en la sesión.
¿Cómo usar el terminal 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
-
-
Abre la página de sesión de acceso remoto en tu navegador web:
-
Para ejecutar una sesión con Appium Inspector, haga lo siguiente:
-
Haga clic en el botón Configurar sesión de Appium
-
Siga las instrucciones de la página sobre cómo iniciar una sesión con Appium Inspector.
-
Para ejecutar una prueba de Appium desde tu IDE local, haz lo siguiente:
-
Haga clic en el icono de «copiar» situado junto al texto de la URL del punto de conexión de Appium
-
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.
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