Interaction avec l'appareil à l'aide d'Appium - AWS Device Farm

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Interaction avec l'appareil à l'aide d'Appium

Une fois que vous avez créé une session d'accès à distance, l'appareil sera disponible pour les tests Appium. Pendant toute la durée de la session d'accès à distance, vous pouvez exécuter autant de sessions Appium que vous le souhaitez sur l'appareil, sans aucune limite quant aux clients que vous utilisez. Par exemple, vous pouvez commencer par exécuter un test en utilisant votre code Appium local à partir de votre IDE, puis passer à l'utilisation d'Appium Inspector pour résoudre les problèmes que vous rencontrez. La session peut durer jusqu'à 150 minutes, mais s'il n'y a aucune activité pendant plus de 5 minutes (via la console interactive ou via le point de terminaison Appium), la session expirera.

Utilisation d'applications pour les tests avec votre session Appium

Device Farm vous permet d'utiliser vos applications dans le cadre de votre demande de création de session d'accès à distance ou d'installer des applications pendant la session d'accès à distance elle-même. Ces applications sont automatiquement installées sur l'appareil testé et sont injectées en tant que fonctionnalités par défaut pour toute demande de session Appium. Lorsque vous créez une session d'accès à distance, vous avez la possibilité de transmettre un ARN d'application, qui sera utilisé par défaut comme appium:app fonctionnalité pour toutes les sessions Appium suivantes, ainsi qu'une application auxiliaire ARNs, qui sera utilisée comme fonctionnalité. appium:otherApps

Par exemple, si vous créez une session d'accès à distance en utilisant une application com.aws.devicefarm.sample com.aws.devicefarm.other.sample comme application et comme application auxiliaire, lorsque vous créerez une session Appium, elle disposera de fonctionnalités similaires aux suivantes :

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

Au cours de votre session, vous pouvez installer des applications supplémentaires (soit dans la console, soit à l'aide de l'InstallToRemoteAccessSessionAPI). Elles remplaceront toutes les applications existantes précédemment utilisées comme appium:app fonctionnalité. Si les applications précédemment utilisées ont un nom de package distinct, elles resteront sur l'appareil et seront utilisées dans le cadre de la appium:otherApps fonctionnalité.

Par exemple, si vous utilisez initialement une application com.aws.devicefarm.sample lors de la création de votre session d'accès à distance, mais que vous installez ensuite une nouvelle application nommée com.aws.devicefarm.other.sample pendant la session, vos sessions Appium auront des fonctionnalités similaires aux suivantes :

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

Si vous préférez, vous pouvez spécifier explicitement les fonctionnalités de votre application en utilisant le nom de l'application (en utilisant les appium:bundleId fonctionnalités appium:appPackage ou pour Android et iOS respectivement).

Si vous testez une application Web, spécifiez la browserName capacité de votre demande de création de session Appium. Le Chrome navigateur est disponible sur tous les appareils Android et le Safari navigateur est disponible sur tous les appareils iOS.

Device Farm ne prend pas en charge la transmission d'une URL distante ou d'un chemin de système de fichiers local au appium:app cours d'une session d'accès à distance. Téléchargez des applications sur Device Farm et incluez-les plutôt dans la session.

Note

Pour plus d'informations sur le téléchargement automatique d'applications dans le cadre de votre session d'accès à distance, consultez la section Automatisation des téléchargements d'applications.

Comment utiliser le point de terminaison Appium

Voici les étapes pour accéder au point de terminaison Appium de la session depuis la console, le AWS CLI, et le. AWS SDKs Ces étapes incluent comment commencer à exécuter des tests à l'aide de divers frameworks de test client Appium :

Console
  1. Ouvrez la page de votre session d'accès à distance dans votre navigateur Web :

    La page de session d'accès à distance
  2. Pour exécuter une session à l'aide d'Appium Inspector, procédez comme suit :

    1. Cliquez sur le bouton Configurer la session Appium

    2. Suivez les instructions de la page pour savoir comment démarrer une session à l'aide d'Appium Inspector.

  3. Pour exécuter un test Appium depuis votre IDE local, procédez comme suit :

    1. Cliquez sur l'icône « copier » à côté du texte URL du point de terminaison Appium

    2. Collez cette URL dans votre code Appium local là où vous spécifiez actuellement votre adresse distante ou votre exécuteur de commande. Pour des exemples spécifiques à une langue, veuillez cliquer sur l'un des onglets de cette fenêtre d'exemple correspondant à la langue de votre choix.

AWS CLI

Tout d'abord, vérifiez que votre version de l'AWS CLI est up-to-date correcte en téléchargeant et en installant la dernière version.

Important

Le champ de point de terminaison Appium n'est pas disponible dans les anciennes versions de l'AWS CLI.

Une fois votre session ouverte, l'URL du point de terminaison Appium sera disponible via un champ nommé remoteDriverEndpoint dans la réponse à un appel à l'GetRemoteAccessSessionAPI :

$ 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"

Cela affichera des résultats tels que les suivants :

{ "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...", ... }

Vous pouvez utiliser cette URL dans votre code Appium local partout où vous spécifiez actuellement votre adresse distante ou votre exécuteur de commande. Pour des exemples spécifiques à une langue, veuillez cliquer sur l'un des onglets de cette fenêtre d'exemple correspondant à la langue de votre choix.

Pour un exemple d'interaction avec le point de terminaison directement depuis la ligne de commande, vous pouvez utiliser l'outil de ligne de commande curl pour appeler directement un WebDriver point de terminaison :

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

Cela affichera des résultats tels que les suivants :

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

Une fois votre session ouverte, l'URL du point de terminaison Appium sera disponible via un champ nommé remoteDriverEndpoint dans la réponse à un appel à l'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

Remarque : cet exemple utilise le AWS SDK pour Java v2 et est compatible avec les versions 11 et supérieures du JDK.

Une fois votre session ouverte, l'URL du point de terminaison Appium sera disponible via un champ nommé remoteDriverEndpoint dans la réponse à un appel à l'GetRemoteAccessSessionAPI :

// 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

Remarque : cet exemple utilise le AWS SDK pour JavaScript v3 et WebDriverIO v8+ à l'aide de Node 18+.

Une fois votre session ouverte, l'URL du point de terminaison Appium sera disponible via un champ nommé remoteDriverEndpoint dans la réponse à un appel à l'GetRemoteAccessSessionAPI :

// 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#

Une fois votre session ouverte, l'URL du point de terminaison Appium sera disponible via un champ nommé remoteDriverEndpoint dans la réponse à un appel à l'GetRemoteAccessSessionAPI :

// 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

Une fois votre session ouverte, l'URL du point de terminaison Appium sera disponible via un champ nommé remoteDriverEndpoint dans la réponse à un appel à l'GetRemoteAccessSessionAPI :

# 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