Berinteraksi dengan perangkat menggunakan Appium - Device Farm AWS

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Berinteraksi dengan perangkat menggunakan Appium

Setelah Anda membuat sesi akses jarak jauh, perangkat akan tersedia untuk pengujian Appium. Untuk seluruh durasi sesi akses jarak jauh, Anda dapat menjalankan sesi Appium sebanyak yang Anda inginkan di perangkat, tanpa batasan pada klien yang Anda gunakan. Misalnya, Anda dapat memulai dengan menjalankan pengujian menggunakan kode Appium lokal dari IDE, lalu beralih menggunakan Appium Inspector untuk memecahkan masalah apa pun yang Anda temui. Sesi dapat berlangsung hingga 150 menit, namun, jika tidak ada aktivitas selama lebih dari 5 menit (baik melalui konsol interaktif atau melalui titik akhir Appium), sesi akan habis waktu.

Menggunakan Aplikasi untuk pengujian dengan sesi Appium Anda

Device Farm memungkinkan Anda menggunakan aplikasi sebagai bagian dari permintaan pembuatan sesi akses jarak jauh, atau untuk menginstal aplikasi selama sesi akses jarak jauh itu sendiri. Aplikasi ini secara otomatis diinstal ke perangkat yang sedang diuji dan disuntikkan sebagai kemampuan default untuk permintaan sesi Appium apa pun. Saat Anda membuat sesi akses jarak jauh, Anda memiliki opsi untuk meneruskan ARN aplikasi, yang akan digunakan secara default sebagai appium:app kemampuan untuk semua sesi Appium berikutnya, serta aplikasi tambahan ARNs, yang akan digunakan sebagai kemampuan. appium:otherApps

Misalnya, jika Anda membuat sesi akses jarak jauh menggunakan aplikasi com.aws.devicefarm.sample sebagai aplikasi Anda, dan com.aws.devicefarm.other.sample sebagai salah satu aplikasi tambahan, maka ketika Anda pergi untuk membuat sesi Appium, itu akan memiliki kemampuan yang mirip dengan yang berikut:

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

Selama sesi, Anda dapat menginstal aplikasi tambahan (baik di dalam konsol, atau menggunakan InstallToRemoteAccessSessionAPI). Ini akan menggantikan aplikasi yang ada yang sebelumnya digunakan sebagai appium:app kemampuan. Jika aplikasi yang sebelumnya digunakan memiliki nama paket yang berbeda, mereka akan tetap berada di perangkat dan digunakan sebagai bagian dari appium:otherApps kemampuan.

Misalnya, jika Anda awalnya menggunakan aplikasi com.aws.devicefarm.sample saat membuat sesi akses jarak jauh, tetapi kemudian menginstal aplikasi baru yang diberi nama com.aws.devicefarm.other.sample selama sesi, maka sesi Appium Anda akan memiliki kemampuan yang mirip dengan yang berikut ini:

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

Jika mau, Anda dapat secara eksplisit menentukan kemampuan untuk aplikasi menggunakan nama aplikasi (masing-masing menggunakan appium:bundleId kemampuan appium:appPackage atau untuk Android dan iOS).

Jika Anda menguji aplikasi web, tentukan browserName kemampuan untuk permintaan pembuatan sesi Appium Anda. ChromeBrowser tersedia di semua perangkat Android, dan Safari browser tersedia di semua perangkat iOS.

Device Farm tidak mendukung penerusan URL jarak jauh atau jalur sistem file lokal appium:app selama sesi akses jarak jauh. Unggah aplikasi ke Device Farm dan sertakan dalam sesi sebagai gantinya.

catatan

Untuk informasi selengkapnya tentang mengunggah aplikasi secara otomatis sebagai bagian dari sesi akses jarak jauh Anda, lihat mengotomatiskan unggahan aplikasi.

Cara menggunakan titik akhir Appium

Berikut adalah langkah-langkah untuk mengakses titik akhir Appium sesi dari konsol, konsol AWS CLI, dan. AWS SDKs Langkah-langkah ini mencakup cara memulai menjalankan pengujian menggunakan berbagai kerangka kerja pengujian klien Appium:

Console
  1. Buka halaman sesi akses jarak jauh Anda di browser web Anda:

    Halaman sesi akses jarak jauh
  2. Untuk menjalankan sesi menggunakan Appium Inspector, lakukan hal berikut:

    1. Klik tombolnya Pengaturan sesi Appium

    2. Ikuti petunjuk di halaman untuk cara memulai sesi menggunakan Appium Inspector.

  3. Untuk menjalankan pengujian Appium dari IDE lokal Anda, lakukan hal berikut:

    1. Klik ikon “salin” di sebelah teks URL titik akhir Appium

    2. Tempel URL ini ke kode Appium lokal Anda di mana pun Anda saat ini menentukan alamat jarak jauh atau pelaksana perintah Anda. Untuk contoh khusus bahasa, silakan klik salah satu tab di jendela contoh ini untuk bahasa pilihan Anda.

AWS CLI

Pertama, verifikasi bahwa versi AWS CLI Anda adalah up-to-date dengan mengunduh dan menginstal versi terbaru.

penting

Bidang titik akhir Appium tidak tersedia di AWS CLI versi lama.

Setelah sesi Anda aktif dan berjalan, URL titik akhir Appium akan tersedia melalui remoteDriverEndpoint bidang bernama sebagai respons terhadap panggilan ke 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"

Ini akan menampilkan output seperti berikut:

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

Anda dapat menggunakan URL ini dalam kode Appium lokal Anda di mana pun Anda saat ini menentukan alamat jarak jauh atau pelaksana perintah Anda. Untuk contoh khusus bahasa, silakan klik salah satu tab di jendela contoh ini untuk bahasa pilihan Anda.

Untuk contoh cara berinteraksi dengan titik akhir langsung dari baris perintah, Anda dapat menggunakan alat baris perintah curl untuk memanggil titik akhir secara langsung: WebDriver

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

Ini akan menampilkan output seperti berikut:

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

Setelah sesi Anda aktif dan berjalan, URL titik akhir Appium akan tersedia melalui remoteDriverEndpoint bidang bernama sebagai respons terhadap panggilan ke API: GetRemoteAccessSession

# 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

Catatan: contoh ini menggunakan AWS SDK for Java v2, dan kompatibel dengan JDK versi 11 dan yang lebih tinggi.

Setelah sesi Anda aktif dan berjalan, URL titik akhir Appium akan tersedia melalui remoteDriverEndpoint bidang bernama sebagai respons terhadap panggilan ke 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

Catatan: contoh ini menggunakan AWS SDK untuk JavaScript v3 dan WebDriverIO v8+ menggunakan Node 18+.

Setelah sesi Anda aktif dan berjalan, URL titik akhir Appium akan tersedia melalui remoteDriverEndpoint bidang bernama sebagai respons terhadap panggilan ke 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#

Setelah sesi Anda aktif dan berjalan, URL titik akhir Appium akan tersedia melalui remoteDriverEndpoint bidang bernama sebagai respons terhadap panggilan ke 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

Setelah sesi Anda aktif dan berjalan, URL titik akhir Appium akan tersedia melalui remoteDriverEndpoint bidang bernama sebagai respons terhadap panggilan ke 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