

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
<a name="appium-endpoint-interaction"></a>

Setelah Anda [membuat sesi akses jarak jauh](how-to-create-session.md), 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](limits.md#service-limits), 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
<a name="appium-endpoint-using-apps"></a>

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 (`Chrome`di Android, `Safari` di iOS).

[Batas ukuran aplikasi](limits.md#file-limits) 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
<a name="appium-endpoint-app-uploaded"></a>

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 [https://docs.aws.amazon.com/devicefarm/latest/APIReference/API_CreateRemoteAccessSession.html](https://docs.aws.amazon.com/devicefarm/latest/APIReference/API_CreateRemoteAccessSession.html). 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 [https://docs.aws.amazon.com/devicefarm/latest/APIReference/API_InstallToRemoteAccessSession.html](https://docs.aws.amazon.com/devicefarm/latest/APIReference/API_InstallToRemoteAccessSession.html)API, atau dengan mengunggahnya melalui konsol Device Farm. Ini memungkinkan Anda untuk mengubah aplikasi yang sedang diuji tanpa membuat sesi baru.

1. 

**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](api-ref.md#upload-example).

### Menggunakan URL HTTPS
<a name="appium-endpoint-app-https-url"></a>

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
<a name="appium-endpoint-app-s3-uri"></a>

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](custom-test-environments-iam-roles.md) 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](custom-test-environments-iam-roles.md)

**Example**  

```
{
  "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
<a name="appium-endpoint-app-package-name"></a>

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
<a name="appium-endpoint-app-web"></a>

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
<a name="appium-endpoint-how-to-use"></a>

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](http://docs.aws.amazon.com/id_id/devicefarm/latest/developerguide/images/aws-device-farm-appium-endpoint.png)

1. Untuk menjalankan sesi menggunakan Appium Inspector, lakukan hal berikut:

   1. Klik tombolnya **Pengaturan sesi Appium**

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

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

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

   1. 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](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html).

**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: [https://docs.aws.amazon.com/devicefarm/latest/APIReference/API_GetRemoteAccessSession.html](https://docs.aws.amazon.com/devicefarm/latest/APIReference/API_GetRemoteAccessSession.html)

```
$ 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](https://curl.se/) 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: [https://docs.aws.amazon.com/devicefarm/latest/APIReference/API_GetRemoteAccessSession.html](https://docs.aws.amazon.com/devicefarm/latest/APIReference/API_GetRemoteAccessSession.html)

```
# 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: [https://docs.aws.amazon.com/devicefarm/latest/APIReference/API_GetRemoteAccessSession.html](https://docs.aws.amazon.com/devicefarm/latest/APIReference/API_GetRemoteAccessSession.html)

```
// 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: [https://docs.aws.amazon.com/devicefarm/latest/APIReference/API_GetRemoteAccessSession.html](https://docs.aws.amazon.com/devicefarm/latest/APIReference/API_GetRemoteAccessSession.html)

```
// 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: [https://docs.aws.amazon.com/devicefarm/latest/APIReference/API_GetRemoteAccessSession.html](https://docs.aws.amazon.com/devicefarm/latest/APIReference/API_GetRemoteAccessSession.html)

```
// 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: [https://docs.aws.amazon.com/devicefarm/latest/APIReference/API_GetRemoteAccessSession.html](https://docs.aws.amazon.com/devicefarm/latest/APIReference/API_GetRemoteAccessSession.html)

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

------