View a markdown version of this page

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 apa yang Anda gunakan. Misalnya, Anda dapat memulai dengan menjalankan pengujian menggunakan kode Appium lokal dari IDE Anda, 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

Ada beberapa cara untuk menyediakan aplikasi untuk digunakan dengan sesi Appium Anda:

  • Unggah aplikasi ke Device Farm dan instal di sesi.

  • Tentukan URL HTTPS atau Amazon S3 URI sebagai kemampuannya. appium:app

  • Referensikan aplikasi yang sudah diinstal dengan nama paketnya (menggunakan appium:appPackage di Android atau di appium:bundleId iOS).

  • Uji aplikasi web dengan menentukan browserName kemampuan (Chromedi Android, Safari di iOS).

Batas ukuran aplikasi standar (4 GB) berlaku untuk semua sumber aplikasi.

catatan

Device Farm tidak mendukung penerusan jalur sistem file lokal appium:app selama sesi akses jarak jauh.

Mengunggah, menginstal, dan menggunakan aplikasi

Untuk menggunakan aplikasi yang diunggah dengan sesi Appium Anda, ikuti langkah-langkah berikut:

  1. Unggah dan instal aplikasi Anda

    Ada dua cara untuk mengunggah dan menginstal aplikasi ke perangkat yang sedang diuji:

    • Sertakan aplikasi ARN dalam permintaan Anda CreateRemoteAccessSession. Aplikasi secara otomatis diinstal ke perangkat saat sesi dimulai. Anda juga dapat menyertakan aplikasi tambahan ARNs, yang akan diinstal bersama aplikasi utama.

    • Instal aplikasi selama sesi aktif menggunakan InstallToRemoteAccessSessionAPI, atau dengan mengunggahnya melalui konsol Device Farm. Ini memungkinkan Anda untuk mengubah aplikasi yang sedang diuji tanpa membuat sesi baru.

  2. Gunakan aplikasi yang diinstal

    Setelah diinstal, aplikasi secara otomatis disuntikkan sebagai appium:app kemampuan default untuk sesi Appium berikutnya. Jika Anda menyertakan aplikasi tambahan, mereka ditetapkan sebagai appium:otherApps kemampuan.

    Misalnya, jika Anda membuat sesi akses jarak jauh menggunakan com.aws.devicefarm.sample sebagai aplikasi Anda, dan com.aws.devicefarm.other.sample sebagai salah satu aplikasi tambahan Anda, 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\"]", ... } } }

    Jika Anda menginstal aplikasi baru selama sesi, itu menggantikan appium:app kemampuan saat ini. Jika aplikasi yang diinstal sebelumnya memiliki nama paket yang berbeda, itu tetap ada di perangkat dan pindah ke appium:otherApps kemampuan.

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

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

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

Menggunakan URL HTTPS

Anda dapat menentukan URL HTTPS yang dapat diakses publik sebagai kemampuan yang appium:app diinginkan saat membuat sesi Appium. URL harus mengarah langsung ke file aplikasi yang dapat diunduh (misalnya, .ipa file .apk atau). Device Farm mengunduh aplikasi dari URL yang ditentukan dan menginstalnya ke perangkat yang sedang diuji.

penting

Hanya HTTPS URLs yang didukung. HTTP biasa URLs ditolak.

Misalnya, permintaan pembuatan sesi Appium berikut mengunduh aplikasi dari URL HTTPS:

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

Menggunakan URI Amazon S3

Anda dapat menentukan URI Amazon S3 (misalnya,s3://my-bucket/path/to/MyApp.ipa) sebagai kemampuan appium:app yang diinginkan saat membuat sesi Appium. Device Farm mengunduh aplikasi dari lokasi S3 yang ditentukan dan menginstalnya ke perangkat yang sedang diuji.

Untuk menggunakan URI S3, persyaratan berikut harus dipenuhi:

  • Sesi akses jarak jauh harus dimulai dari proyek yang memiliki peran eksekusi IAM yang dikonfigurasi.

  • Peran eksekusi IAM harus memiliki durasi sesi maksimum minimal 150 menit, karena peran tersebut diasumsikan selama durasi sesi akses jarak jauh.

  • Peran eksekusi IAM harus memiliki izin untuk memanggil s3:GetObject objek S3 yang ditentukan dalam URI. Kami juga merekomendasikan pemberian s3:HeadObject izin pada objek yang sama, yang memungkinkan Device Farm memvalidasi keberadaan objek sebelum mencoba mengunduh.

Misalnya, permintaan pembuatan sesi Appium berikut mengunduh aplikasi dari URI S3:

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

Berikut ini adalah contoh kebijakan izin IAM yang memberikan akses yang disarankan untuk mengunduh aplikasi dari Amazon S3, termasuk izin opsional. s3:HeadObject Untuk informasi selengkapnya tentang mengonfigurasi peran eksekusi IAM, lihat. Akses sumber daya AWS menggunakan Peran Eksekusi IAM

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

Menggunakan aplikasi yang sudah diinstal

Jika aplikasi yang ingin Anda uji sudah diinstal pada perangkat, Anda dapat mereferensikannya langsung dengan nama paketnya alih-alih mengunggahnya. Gunakan appium:appPackage dan appium:appActivity kemampuan di Android, atau appium:bundleId kemampuan di iOS.

Misalnya, permintaan pembuatan sesi Appium berikut meluncurkan aplikasi Android yang sudah diinstal:

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

Di iOS, gunakan appium:bundleId sebagai gantinya:

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

Menguji aplikasi web

Untuk menguji aplikasi web, tentukan browserName kemampuan dalam permintaan pembuatan sesi Appium Anda. Gunakan Chrome di perangkat Android atau Safari di perangkat iOS.

Misalnya, permintaan berikut membuka Chrome di perangkat Android:

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

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