

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Fernzugriff in AWS Device Farm
<a name="remote-access"></a>

 Der Remotezugriff ermöglicht, Geräte über Ihren Webbrowser in Echtzeit zu bedienen, inklusive Fingergesten, Gesten und anderen Interaktionen, beispielsweise, um Funktionalitäten zu testen und Kundenprobleme zu reproduzieren. Sie interagieren mit einem bestimmten Gerät, indem Sie ein Remotezugriffssitzung mit diesem Gerät erstellen.

Eine Sitzung in Device Farm ist eine Echtzeitinteraktion mit einem tatsächlichen, physischen Gerät, das in einem Webbrowser gehostet wird. In einer Sitzung wird das einzelne Gerät angezeigt, das Sie beim Start der Sitzung ausgewählt haben. Ein Benutzer kann mehrere Sitzungen gleichzeitig starten, wobei die Gesamtanzahl von gleichzeitigen Geräten durch die Anzahl der Geräteplätze, die Sie zur Verfügung haben, beschränkt wird. Sie können Geräteplätze für bestimmte Gerätefamilien (Android- oder iOS-Geräte) erwerben. Weitere Informationen finden Sie unter [Device Farm – Preise](https://aws.amazon.com/device-farm/pricing/). 

Device Farm bietet derzeit eine Untergruppe von Geräten für Fernzugriffstests an. Diesem Gerätepool werden laufend neue Geräte hinzugefügt.

Device Farm zeichnet Videos von jeder Fernzugriffssitzung auf und generiert während der Sitzung Aktivitätsprotokolle. Diese Ergebnisse enthalten alle Informationen, die Sie während einer Sitzung eingeben.

**Anmerkung**  
Aus Sicherheitsgründen empfehlen wir Ihnen, in einer Remotezugriffssitzung die Angabe oder Eingabe von sensiblen Daten, wie beispielsweise Kontonummern, persönlichen Anmeldeinformationen und anderen Details, zu vermeiden. Verwenden Sie nach Möglichkeit Alternativen, die speziell für Tests entwickelt wurden, z. B. Testkonten.

**Topics**
+ [Erstellen einer Fernzugriffssitzung in AWS Device Farm](how-to-create-session.md)
+ [Verwenden einer Fernzugriffssitzung in AWS Device Farm](how-to-use-session.md)
+ [Abrufen der Ergebnisse einer Fernzugriffssitzung in AWS Device Farm](how-to-access-session-results.md)

# Erstellen einer Fernzugriffssitzung in AWS Device Farm
<a name="how-to-create-session"></a>

Weitere Informationen zu Remotezugriffssitzungen finden Sie unter [Sitzungen](sessions.md).
+ [Voraussetzungen](#how-to-create-session-prerequisites)
+ [Erstellen Sie eine Remotesitzung](#how-to-create-remote-session)
+ [Nächste Schritte](#how-to-create-session-next-steps)

## Voraussetzungen
<a name="how-to-create-session-prerequisites"></a>
+ Erstellen Sie ein Projekt in Device Farm. Befolgen Sie die Anweisungen unter [Ein Projekt in AWS Device Farm erstellen](how-to-create-project.md), und kehren Sie dann zu dieser Seite zurück.

## Erstellen Sie eine Remotesitzung
<a name="how-to-create-remote-session"></a>

------
#### [ Console ]

1. Melden Sie sich bei der Device Farm Farm-Konsole unter [https://console.aws.amazon.com/devicefarm](https://console.aws.amazon.com/devicefarm) an.

1. Wählen Sie im Navigationsbereich Device Farm die Option **Mobile Device Testing** und dann **Projects** aus.

1. Wenn Sie bereits ein Projekt haben, wählen Sie es aus der Liste aus. Andernfalls erstellen Sie ein Projekt, indem Sie den Anweisungen unter folgen[Ein Projekt in AWS Device Farm erstellen](how-to-create-project.md).

1. Wählen Sie auf der Registerkarte **Fernzugriff** die Option **Fernzugriffssitzung erstellen** aus.

1. Wählen Sie ein Gerät für Ihre Sitzung. Sie können aus der Liste der verfügbaren Geräte auswählen oder mithilfe der Suchleiste oben in der Liste nach einem Gerät suchen.

1. *(Optional)* Nehmen Sie eine App und zusätzliche Apps in die Sitzung auf. Dabei kann es sich um neu hochgeladene Apps oder um Apps handeln, die zuvor in den letzten 30 Tagen in dieses Projekt hochgeladen wurden (nach 30 Tagen [laufen App-Uploads ab](data-protection.md#data-protection-retention)).

1. Geben Sie unter **Session name (Sitzungsname)** einen Namen für die Sitzung ein.

1. Wählen Sie **Confirm and start session (Bestätigen und Sitzung starten)**.

------
#### [ AWS CLI ]

*Hinweis: Diese Anweisungen beziehen sich nur auf die Erstellung einer Fernzugriffssitzung. Anweisungen zum Hochladen einer App zur Verwendung während Ihrer Sitzung finden Sie unter [Automatisieren von App-Uploads](api-ref.md#upload-example).*

Stellen Sie zunächst sicher, dass Ihre AWS-CLI-Version vorhanden ist, up-to-date indem Sie [die neueste Version herunterladen und installieren](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html).

**Wichtig**  
Bestimmte in diesem Dokument erwähnte Befehle sind in älteren Versionen der AWS-CLI nicht verfügbar.

Anschließend können Sie bestimmen, auf welchem Gerät Sie testen möchten:

```
$ aws devicefarm list-devices
```

Dadurch werden Ausgaben wie die folgende angezeigt:

```
{
    "devices":
    [
        {
            "arn": "arn:aws:devicefarm:us-west-2::device:DE5BD47FF3BD42C3A14BF7A6EFB1BFE7",
            "name": "Google Pixel 8",
            "remoteAccessEnabled": true,
            "availability": "HIGHLY_AVAILABLE"
            ...
        },
        ...
    ]
}
```

Anschließend können Sie Ihre Fernzugriffssitzung mit einem Geräte-ARN Ihrer Wahl erstellen:

```
$ aws devicefarm create-remote-access-session \
  --project-arn arn:aws:devicefarm:us-west-2:111122223333:project:12345678-1111-2222-333-456789abcdef \
  --device-arn arn:aws:devicefarm:us-west-2::device:DE5BD47FF3BD42C3A14BF7A6EFB1BFE7 \
  --app-arn arn:aws:devicefarm:us-west-2:111122223333:upload:12345678-1111-2222-333-456789abcdef/12345678-1111-2222-333-456789abcdef \
  --configuration '{
      "auxiliaryApps": [
          "arn:aws:devicefarm:us-west-2:111122223333:upload:12345678-1111-2222-333-456789abcdef/12345678-1111-2222-333-456789abcde0",
          "arn:aws:devicefarm:us-west-2:111122223333:upload:12345678-1111-2222-333-456789abcdef/12345678-1111-2222-333-456789abcde1"
      ]
  }'
```

Dadurch werden Ausgaben wie die folgende angezeigt:

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

Jetzt können wir optional eine Umfrage durchführen und warten, bis die Sitzung fertig ist:

```
$ POLL_INTERVAL=3
TIMEOUT=600
DEADLINE=$(( $(date +%s) + TIMEOUT ))

while [[ "$(date +%s)" -lt "$DEADLINE" ]]; do

  STATUS=$(aws devicefarm get-remote-access-session \
    --arn "$DEVICE_FARM_SESSION_ARN" \
    --query 'remoteAccessSession.status' \
    --output text)

  case "$STATUS" in
    RUNNING)
      echo "Session is ready with status: $STATUS"
      break
      ;;
    STOPPING|COMPLETED)
      echo "Session ended early with status: $STATUS"
      exit 1
      ;;
  esac

done
```

------
#### [ Python ]

*Hinweis: Diese Anweisungen konzentrieren sich nur auf das Erstellen einer Fernzugriffssitzung. Anweisungen zum Hochladen einer App zur Verwendung während Ihrer Sitzung finden Sie unter [Automatisieren von App-Uploads](api-ref.md#upload-example).*

In diesem Beispiel wird zuerst nach allen verfügbaren Google Pixel-Geräten auf Device Farm gesucht, dann eine Fernzugriffssitzung mit diesem Gerät erstellt und gewartet, bis die Sitzung ausgeführt wird.

```
import random
import time
import boto3

client = boto3.client("devicefarm", region_name="us-west-2")

# 1) Gather all matching devices via paginated ListDevices with filters
filters = [
    {"attribute": "MODEL",        "operator": "CONTAINS", "values": ["Pixel"]},
    {"attribute": "AVAILABILITY", "operator": "EQUALS",   "values": ["AVAILABLE"]},
]

matching_arns = []
next_token = None
while True:
    args = {"filters": filters}
    if next_token:
        args["nextToken"] = next_token
    page = client.list_devices(**args)
    for d in page.get("devices", []):
        matching_arns.append(d["arn"])
    next_token = page.get("nextToken")
    if not next_token:
        break

if not matching_arns:
    raise RuntimeError("No available Google Pixel device found.")

# Randomly select one device from the full matching set
device_arn = random.choice(matching_arns)
print("Selected device ARN:", device_arn)

# 2) Create remote access session and wait until RUNNING
resp = client.create_remote_access_session(
    projectArn="arn:aws:devicefarm:us-west-2:111122223333:project:12345678-1111-2222-333-456789abcdef",
    deviceArn=device_arn,
    appArn="arn:aws:devicefarm:us-west-2:111122223333:upload:12345678-1111-2222-333-456789abcdef/12345678-1111-2222-333-456789abcdef",  # optional
    configuration={
        "auxiliaryApps": [  # optional
            "arn:aws:devicefarm:us-west-2:111122223333:upload:12345678-1111-2222-333-456789abcdef/12345678-1111-2222-333-456789abcde0",
            "arn:aws:devicefarm:us-west-2:111122223333:upload:12345678-1111-2222-333-456789abcdef/12345678-1111-2222-333-456789abcde1",
        ]
    },
)

session_arn = resp["remoteAccessSession"]["arn"]
print(f"Created Remote Access Session: {session_arn}")

poll_interval = 3
timeout = 600
deadline = time.time() + timeout
terminal_states = ["STOPPING", "COMPLETED"]

while True:
    out = client.get_remote_access_session(arn=session_arn)
    status = out["remoteAccessSession"]["status"]
    print(f"Current status: {status}")

    if status == "RUNNING":
        print(f"Session is ready with status: {status}")
        break
    if status in terminal_states:
        raise RuntimeError(f"Session ended early with status: {status}")
    if time.time() >= deadline:
        raise RuntimeError("Timed out waiting for session to be ready.")
    time.sleep(poll_interval)
```

------
#### [ Java ]

*Hinweis: Diese Anweisungen beziehen sich nur auf das Erstellen einer Fernzugriffssitzung. Anweisungen zum Hochladen einer App zur Verwendung während Ihrer Sitzung finden Sie unter [Automatisieren von App-Uploads](api-ref.md#upload-example).*

*Hinweis: Dieses Beispiel verwendet das AWS SDK for Java v2 und ist mit JDK-Versionen 11 und höher kompatibel.*

In diesem Beispiel wird zuerst nach allen verfügbaren Google Pixel-Geräten auf Device Farm gesucht, dann eine Fernzugriffssitzung mit diesem Gerät erstellt und gewartet, bis die Sitzung ausgeführt wird.

```
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.ThreadLocalRandom;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.devicefarm.DeviceFarmClient;
import software.amazon.awssdk.services.devicefarm.model.CreateRemoteAccessSessionConfiguration;
import software.amazon.awssdk.services.devicefarm.model.CreateRemoteAccessSessionRequest;
import software.amazon.awssdk.services.devicefarm.model.CreateRemoteAccessSessionResponse;
import software.amazon.awssdk.services.devicefarm.model.Device;
import software.amazon.awssdk.services.devicefarm.model.DeviceFilter;
import software.amazon.awssdk.services.devicefarm.model.DeviceFilterAttribute;
import software.amazon.awssdk.services.devicefarm.model.GetRemoteAccessSessionRequest;
import software.amazon.awssdk.services.devicefarm.model.GetRemoteAccessSessionResponse;
import software.amazon.awssdk.services.devicefarm.model.ListDevicesRequest;
import software.amazon.awssdk.services.devicefarm.model.ListDevicesResponse;
import software.amazon.awssdk.services.devicefarm.model.RuleOperator;

public class CreateRemoteAccessSession {
  public static void main(String[] args) throws Exception {
    DeviceFarmClient client = DeviceFarmClient.builder()
        .region(Region.US_WEST_2)
        .build();

    String projectArn = "arn:aws:devicefarm:us-west-2:111122223333:project:12345678-1111-2222-333-456789abcdef";
    String appArn     = "arn:aws:devicefarm:us-west-2:111122223333:upload:12345678-1111-2222-333-456789abcdef/12345678-1111-2222-333-456789abcdef";
    String aux1       = "arn:aws:devicefarm:us-west-2:111122223333:upload:12345678-1111-2222-333-456789abcdef/12345678-1111-2222-333-456789abcde0";
    String aux2       = "arn:aws:devicefarm:us-west-2:111122223333:upload:12345678-1111-2222-333-456789abcdef/12345678-1111-2222-333-456789abcde1";

    // 1) Gather all matching devices via paginated ListDevices with filters
    List<DeviceFilter> filters = Arrays.asList(
        DeviceFilter.builder()
            .attribute(DeviceFilterAttribute.MODEL)
            .operator(RuleOperator.CONTAINS)
            .values("Pixel")
            .build(),
        DeviceFilter.builder()
            .attribute(DeviceFilterAttribute.AVAILABILITY)
            .operator(RuleOperator.EQUALS)
            .values("AVAILABLE")
            .build()
    );

    List<String> matchingDeviceArns = new ArrayList<>();
    String next = null;
    do {
      ListDevicesResponse page = client.listDevices(
          ListDevicesRequest.builder().filters(filters).nextToken(next).build());
      for (Device d : page.devices()) {
        matchingDeviceArns.add(d.arn());
      }
      next = page.nextToken();
    } while (next != null);

    if (matchingDeviceArns.isEmpty()) {
      throw new RuntimeException("No available Google Pixel device found.");
    }

    // Randomly select one device from the full matching set
    String deviceArn = matchingDeviceArns.get(
        ThreadLocalRandom.current().nextInt(matchingDeviceArns.size()));
    System.out.println("Selected device ARN: " + deviceArn);

    // 2) Create Remote Access session and wait until it is RUNNING
    CreateRemoteAccessSessionConfiguration cfg = CreateRemoteAccessSessionConfiguration.builder()
        .auxiliaryApps(Arrays.asList(aux1, aux2))
        .build();

    CreateRemoteAccessSessionResponse res = client.createRemoteAccessSession(
        CreateRemoteAccessSessionRequest.builder()
            .projectArn(projectArn)
            .deviceArn(deviceArn)
            .appArn(appArn)       // optional
            .configuration(cfg)   // optional
            .build());

    String sessionArn = res.remoteAccessSession().arn();
    System.out.println("Created Remote Access Session: " + sessionArn);

    int pollIntervalMs = 3000;
    long timeoutMs = 600_000L;
    long deadline = System.currentTimeMillis() + timeoutMs;

    while (true) {
      GetRemoteAccessSessionResponse get = client.getRemoteAccessSession(
          GetRemoteAccessSessionRequest.builder().arn(sessionArn).build());
      String status = get.remoteAccessSession().statusAsString();
      System.out.println("Current status: " + status);

      if ("RUNNING".equals(status)) {
        System.out.println("Session is ready with status: " + status);
        break;
      }
      if ("STOPPING".equals(status) || "COMPLETED".equals(status)) {
        throw new RuntimeException("Session ended early with status: " + status);
      }
      if (System.currentTimeMillis() >= deadline) {
        throw new RuntimeException("Timed out waiting for session to be ready.");
      }
      Thread.sleep(pollIntervalMs);
    }
  }
}
```

------
#### [ JavaScript ]

*Hinweis: Diese Anweisungen beziehen sich nur auf das Erstellen einer Fernzugriffssitzung. Anweisungen zum Hochladen einer App zur Verwendung während Ihrer Sitzung finden Sie unter [Automatisieren von App-Uploads](api-ref.md#upload-example).*

*Hinweis: In diesem Beispiel wird das AWS-SDK für JavaScript Version 3 verwendet.*

In diesem Beispiel wird zuerst nach allen verfügbaren Google Pixel-Geräten auf Device Farm gesucht, dann eine Fernzugriffssitzung mit diesem Gerät erstellt und gewartet, bis die Sitzung ausgeführt wird.

```
import {
  DeviceFarmClient,
  ListDevicesCommand,
  CreateRemoteAccessSessionCommand,
  GetRemoteAccessSessionCommand,
} from "@aws-sdk/client-device-farm";

const client = new DeviceFarmClient({ region: "us-west-2" });

// 1) Gather all matching devices via paginated ListDevices with filters
const filters = [
  { attribute: "MODEL",        operator: "CONTAINS", values: ["Pixel"] },
  { attribute: "AVAILABILITY", operator: "EQUALS",   values: ["AVAILABLE"] },
];

let nextToken;
const matching = [];

while (true) {
  const page = await client.send(new ListDevicesCommand({ filters, nextToken }));
  for (const d of page.devices ?? []) {
    matching.push(d.arn);
  }
  nextToken = page.nextToken;
  if (!nextToken) break;
}

if (matching.length === 0) {
  throw new Error("No available Google Pixel device found.");
}

// Randomly select one device from the full matching set
const deviceArn = matching[Math.floor(Math.random() * matching.length)];
console.log("Selected device ARN:", deviceArn);

// 2) Create remote access session and wait until RUNNING
const out = await client.send(new CreateRemoteAccessSessionCommand({
  projectArn: "arn:aws:devicefarm:us-west-2:111122223333:project:12345678-1111-2222-333-456789abcdef",
  deviceArn,
  appArn: "arn:aws:devicefarm:us-west-2:111122223333:upload:12345678-1111-2222-333-456789abcdef/12345678-1111-2222-333-456789abcdef", // optional
  configuration: {
    auxiliaryApps: [ // optional
      "arn:aws:devicefarm:us-west-2:111122223333:upload:12345678-1111-2222-333-456789abcdef/12345678-1111-2222-333-456789abcde0",
      "arn:aws:devicefarm:us-west-2:111122223333:upload:12345678-1111-2222-333-456789abcdef/12345678-1111-2222-333-456789abcde1",
    ],
  },
}));

const sessionArn = out.remoteAccessSession?.arn;
console.log("Created Remote Access Session:", sessionArn);

const pollIntervalMs = 3000;
const timeoutMs = 600000;
const deadline = Date.now() + timeoutMs;

while (true) {
  const get = await client.send(new GetRemoteAccessSessionCommand({ arn: sessionArn }));
  const status = get.remoteAccessSession?.status;
  console.log("Current status:", status);

  if (status === "RUNNING") {
    console.log("Session is ready with status:", status);
    break;
  }
  if (status === "STOPPING" || status === "COMPLETED") {
    throw new Error(`Session ended early with status: ${status}`);
  }
  if (Date.now() >= deadline) {
    throw new Error("Timed out waiting for session to be ready.");
  }
  await new Promise((r) => setTimeout(r, pollIntervalMs));
}
```

------
#### [ C\$1 ]

*Hinweis: Diese Anweisungen beziehen sich nur auf das Erstellen einer Fernzugriffssitzung. Anweisungen zum Hochladen einer App zur Verwendung während Ihrer Sitzung finden Sie unter [Automatisieren von App-Uploads](api-ref.md#upload-example).*

In diesem Beispiel wird zuerst nach allen verfügbaren Google Pixel-Geräten auf Device Farm gesucht, dann eine Fernzugriffssitzung mit diesem Gerät erstellt und gewartet, bis die Sitzung ausgeführt wird.

```
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Amazon;
using Amazon.DeviceFarm;
using Amazon.DeviceFarm.Model;

class Program
{
    static async Task Main()
    {
        var client = new AmazonDeviceFarmClient(RegionEndpoint.USWest2);

        // 1) Gather all matching devices via paginated ListDevices with filters
        var filters = new List<DeviceFilter>
        {
            new DeviceFilter { Attribute = DeviceAttribute.MODEL,        Operator = RuleOperator.CONTAINS, Values = new List<string>{ "Pixel" } },
            new DeviceFilter { Attribute = DeviceAttribute.AVAILABILITY, Operator = RuleOperator.EQUALS,   Values = new List<string>{ "AVAILABLE" } },
        };

        var matchingArns = new List<string>();
        string nextToken = null;

        do
        {
            var list = await client.ListDevicesAsync(new ListDevicesRequest
            {
                Filters = filters,
                NextToken = nextToken
            });

            foreach (var d in list.Devices)
                matchingArns.Add(d.Arn);

            nextToken = list.NextToken;
        }
        while (nextToken != null);

        if (matchingArns.Count == 0)
            throw new Exception("No available Google Pixel device found.");

        // Randomly select one device from the full matching set
        var rnd = new Random();
        var deviceArn = matchingArns[rnd.Next(matchingArns.Count)];
        Console.WriteLine($"Selected device ARN: {deviceArn}");

        // 2) Create remote access session and wait until RUNNING
        var request = new CreateRemoteAccessSessionRequest
        {
            ProjectArn = "arn:aws:devicefarm:us-west-2:111122223333:project:12345678-1111-2222-333-456789abcdef",
            DeviceArn  = deviceArn,
            AppArn     = "arn:aws:devicefarm:us-west-2:111122223333:upload:12345678-1111-2222-333-456789abcdef/12345678-1111-2222-333-456789abcdef", // optional
            Configuration = new CreateRemoteAccessSessionConfiguration
            {
                AuxiliaryApps = new List<string>
                {
                    "arn:aws:devicefarm:us-west-2:111122223333:upload:12345678-1111-2222-333-456789abcdef/12345678-1111-2222-333-456789abcde0",
                    "arn:aws:devicefarm:us-west-2:111122223333:upload:12345678-1111-2222-333-456789abcdef/12345678-1111-2222-333-456789abcde1"
                }
            }
        };

        request.Configuration.AuxiliaryApps.RemoveAll(string.IsNullOrWhiteSpace);

        var response = await client.CreateRemoteAccessSessionAsync(request);
        var sessionArn = response.RemoteAccessSession.Arn;
        Console.WriteLine($"Created Remote Access Session: {sessionArn}");

        var pollIntervalMs = 3000;
        var timeoutMs = 600000;
        var deadline = DateTime.UtcNow.AddMilliseconds(timeoutMs);

        while (true)
        {
            var get = await client.GetRemoteAccessSessionAsync(new GetRemoteAccessSessionRequest { Arn = sessionArn });
            var status = get.RemoteAccessSession.Status.Value;
            Console.WriteLine($"Current status: {status}");

            if (status == "RUNNING")
            {
                Console.WriteLine($"Session is ready with status: {status}");
                break;
            }
            if (status == "STOPPING" || status == "COMPLETED")
            {
                throw new Exception($"Session ended early with status: {status}");
            }
            if (DateTime.UtcNow >= deadline)
            {
                throw new TimeoutException("Timed out waiting for session to be ready.");
            }

            await Task.Delay(pollIntervalMs);
        }
    }
}
```

------
#### [ Ruby ]

*Hinweis: Diese Anweisungen beziehen sich nur auf das Erstellen einer Fernzugriffssitzung. Anweisungen zum Hochladen einer App zur Verwendung während Ihrer Sitzung finden Sie unter [Automatisieren von App-Uploads](api-ref.md#upload-example).*

In diesem Beispiel wird zuerst nach allen verfügbaren Google Pixel-Geräten auf Device Farm gesucht, dann eine Fernzugriffssitzung mit diesem Gerät erstellt und gewartet, bis die Sitzung ausgeführt wird.

```
require 'aws-sdk-devicefarm'

client = Aws::DeviceFarm::Client.new(region: 'us-west-2')

# 1) Gather all matching devices via paginated ListDevices with filters
filters = [
  { attribute: 'MODEL',        operator: 'CONTAINS', values: ['Pixel'] },
  { attribute: 'AVAILABILITY', operator: 'EQUALS',   values: ['AVAILABLE'] },
]

matching_arns = []
next_token = nil
loop do
  resp = client.list_devices(filters: filters, next_token: next_token)
  resp.devices&.each { |d| matching_arns << d.arn }
  next_token = resp.next_token
  break unless next_token
end

abort "No available Google Pixel device found." if matching_arns.empty?

# Randomly select one device from the full matching set
device_arn = matching_arns.sample
puts "Selected device ARN: #{device_arn}"

# 2) Create remote access session and wait until RUNNING
resp = client.create_remote_access_session(
  project_arn: "arn:aws:devicefarm:us-west-2:111122223333:project:12345678-1111-2222-333-456789abcdef",
  device_arn:  device_arn,
  app_arn:     "arn:aws:devicefarm:us-west-2:111122223333:upload:12345678-1111-2222-333-456789abcdef/12345678-1111-2222-333-456789abcdef", # optional
  configuration: {
    auxiliary_apps: [ # optional
      "arn:aws:devicefarm:us-west-2:111122223333:upload:12345678-1111-2222-333-456789abcdef/12345678-1111-2222-333-456789abcde0",
      "arn:aws:devicefarm:us-west-2:111122223333:upload:12345678-1111-2222-333-456789abcdef/12345678-1111-2222-333-456789abcde1"
    ].compact
  }
)

session_arn = resp.remote_access_session.arn
puts "Created Remote Access Session: #{session_arn}"

poll_interval = 3
timeout = 600
deadline = Time.now + timeout
terminal = %w[STOPPING COMPLETED]

loop do
  get = client.get_remote_access_session(arn: session_arn)
  status = get.remote_access_session.status
  puts "Current status: #{status}"

  if status == 'RUNNING'
    puts "Session is ready with status: #{status}"
    break
  end

  abort "Session ended early with status: #{status}" if terminal.include?(status)
  abort "Timed out waiting for session to be ready." if Time.now >= deadline
  sleep poll_interval
end
```

------

## Nächste Schritte
<a name="how-to-create-session-next-steps"></a>

Device Farm startet die Sitzung, sobald das angeforderte Gerät und die angeforderte Infrastruktur verfügbar sind, normalerweise innerhalb weniger Minuten. Das Dialogfeld **Gerät angefordert** wird angezeigt, bis die Sitzung gestartet wird. Um die Sitzungsanfrage abzubrechen, wählen Sie **Cancel request (Anforderung abbrechen)**. 

Wenn das ausgewählte Gerät nicht verfügbar oder ausgelastet ist, wird der Sitzungsstatus als **Ausstehendes Gerät** angezeigt, was darauf hinweist, dass Sie möglicherweise einige Zeit warten müssen, bis das Gerät zum Testen verfügbar ist.

**Wenn Ihr Konto das Parallelitätslimit für Geräte mit oder ohne Messgerät erreicht hat, wird der Sitzungsstatus als Gleichzeitigkeit ausstehend angezeigt.** [Bei Geräteslots ohne Zähler können Sie die Parallelität erhöhen, indem Sie weitere Geräteslots kaufen.](how-to-purchase-device-slots.md) Für pay-as-you-go Geräte mit Messgerät wenden Sie sich bitte über ein Support-Ticket an AWS, um eine [Erhöhung des Servicekontingents](limits.md) zu beantragen.

Wenn das Sitzungs-Setup beginnt, wird zunächst der Status In **Bearbeitung** und dann der Status **Verbindung hergestellt** angezeigt, während Ihr lokaler Webbrowser versucht, eine Fernverbindung zum Gerät herzustellen.

Wenn Sie nach dem Start einer Sitzung den Browser oder die Browser-Registerkarte schließen, ohne die Sitzung anzuhalten, oder wenn die Verbindung zwischen dem Browser und dem Internet verloren geht, bleibt die Sitzung für fünf weitere Minuten aktiv. Danach beendet Device Farm die Sitzung. Ihr Konto wird jedoch für die Leerlaufzeit belastet. 

Nach dem Start der Sitzung können Sie im Webbrowser mit dem Gerät interagieren oder das Gerät mit [Appium](appium-endpoint.md) testen.

# Verwenden einer Fernzugriffssitzung in AWS Device Farm
<a name="how-to-use-session"></a>

Weitere Informationen zur Ausführung von interaktiven Tests mit Android- und iOS-Apps über Remotezugriffssitzungen finden Sie unter [Sitzungen](sessions.md).
+ [Voraussetzungen](#how-to-use-session-prerequisites)
+ [Verwenden Sie eine Sitzung in der Device Farm Farm-Konsole](#how-to-use-session-console)
+ [Nächste Schritte](#how-to-use-session-next-steps)
+ [Tipps und Tricks](#how-to-use-session-tips)

## Voraussetzungen
<a name="how-to-use-session-prerequisites"></a>
+ Erstellen Sie eine Sitzung. Befolgen Sie die Anweisungen unter [Erstellen einer Sitzung](how-to-create-session.md), und kehren Sie dann zu dieser Seite zurück.

## Verwenden Sie eine Sitzung in der Device Farm Farm-Konsole
<a name="how-to-use-session-console"></a>

Sobald das von Ihnen für eine Remotezugriffssitzung angeforderte Gerät verfügbar ist, zeigt die Konsole den Gerätebildschirm an. Die Sitzung dauert maximal 150 Minuten. Die verbleibende Zeit der Sitzung wird im Feld **Restzeit neben** dem Gerätenamen angezeigt.

### Eine Anwendung installieren
<a name="how-to-use-session-install-app"></a>

Um eine Anwendung auf dem Sitzungsgerät zu installieren, wählen Sie unter **Anwendungen installieren** die Option **Datei auswählen** und wählen Sie dann die APK-Datei (Android) oder die IPA-Datei (iOS) aus, die Sie installieren möchten. Anwendungen, die Sie in einer Remotezugriffssitzung ausführen, erfordern keine Testinstrumentierung oder -bereitstellung.

**Anmerkung**  
Wenn Sie eine App hochladen, gibt es manchmal eine Verzögerung, bevor die App verfügbar ist. Es erscheint eine Bestätigungsmeldung, die Sie darüber informiert, ob die App erfolgreich installiert wurde oder nicht.

### Das Gerät steuern
<a name="how-to-use-session-control-device"></a>

Sie können mit dem in der Konsole angezeigten Gerät wie mit dem echten physischen Gerät interagieren, indem Sie Ihre Maus oder ein ähnliches Gerät für die Touch-Eingabe und die Bildschirmtastatur des Geräts verwenden. Im Fall von Android-Geräten gibt es Schaltflächen in **View controls (Steuerelemente anzeigen)**, die genau wie die Schaltflächen **Start** und **Zurück** auf einem Android-Gerät funktionieren. Im Fall von iOS-Geräten gibt es eine Schaltfläche namens **Home**, die genauso wie die Startschaltfläche auf einem iOS-Gerät funktioniert. Sie können auch zwischen Anwendungen wechseln, die auf dem Gerät ausgeführt werden, indem Sie **Letzte Apps** wählen.

### Zwischen Hoch- und Querformat wechseln
<a name="how-to-use-session-switch-between-portrait-landscape-mode"></a>

Sie können für die Geräte, die Sie verwenden, auch zwischen dem Hochformat- (vertikal) und dem Querformat (horizontal) wechseln. 

## Nächste Schritte
<a name="how-to-use-session-next-steps"></a>

Device Farm setzt die Sitzung fort, bis Sie sie manuell beenden oder das Zeitlimit von 150 Minuten erreicht ist. Um die Sitzung zu beenden, wählen Sie **Sitzung beenden**. Nachdem die Sitzung beendet wurde, können Sie auf das erfasste Video und die erstellten Protokolle zugreifen. Weitere Informationen finden Sie unter [Sitzungsergebnisse werden abgerufen](how-to-access-session-results.md).

## Tipps und Tricks
<a name="how-to-use-session-tips"></a>

In einigen AWS Regionen können Leistungsprobleme bei der Fernzugriffssitzung auftreten. Dies liegt teilweise an der Latenz in einigen Regionen. Wenn Leistungsprobleme auftreten, lassen Sie der Remotesitzung etwas Zeit, um aufzuholen, bevor Sie erneut mit der App interagieren.

# Abrufen der Ergebnisse einer Fernzugriffssitzung in AWS Device Farm
<a name="how-to-access-session-results"></a>

Weitere Informationen zu Sitzungen finden Sie unter [Sitzungen](sessions.md).
+ [Voraussetzungen](#how-to-access-session-results-prerequisites)
+ [Sitzungsdetails anzeigen](#how-to-view-session-details)
+ [Sitzungsvideos oder Sitzungsprotokolle werden heruntergeladen](#how-to-access-session-files)

## Voraussetzungen
<a name="how-to-access-session-results-prerequisites"></a>
+ Führen Sie eine Sitzung durch. Befolgen Sie die Anweisungen unter [Verwenden einer Fernzugriffssitzung in AWS Device FarmVerwenden einer Sitzung](how-to-use-session.md), und kehren Sie dann zu dieser Seite zurück.

## Sitzungsdetails anzeigen
<a name="how-to-view-session-details"></a>

Wenn eine Fernzugriffssitzung endet, zeigt die Device Farm Farm-Konsole eine Tabelle mit Details zu den Aktivitäten während der Sitzung an. Weitere Informationen finden Sie unter [Analysieren von Protokollinformationen](how-to-use-reports.md#how-to-use-reports-console-log).

Gehen Sie wie folgt vor, um die Details einer Sitzung zu einem späteren Zeitpunkt erneut anzuzeigen:

1. Wählen Sie im Navigationsbereich Device Farm die Option **Mobile Device Testing** und dann **Projects** aus.

1. Wählen Sie das Projekt aus, das die Sitzung enthält.

1. Wählen Sie **Fernzugriff** und wählen Sie dann die Sitzung, die Sie überprüfen möchten, aus der Liste aus.

## Sitzungsvideos oder Sitzungsprotokolle werden heruntergeladen
<a name="how-to-access-session-files"></a>

Wenn eine Fernzugriffssitzung endet, bietet die Device Farm Farm-Konsole Zugriff auf eine Videoaufzeichnung der Sitzungs- und Aktivitätsprotokolle. Wählen Sie in den Sitzungsergebnissen die Registerkarte **Files (Dateien)**, um eine Liste mit Links zu den Sitzungsvideos und -protokollen anzuzeigen. Sie können diese Dateien im Browser anzeigen oder lokal speichern.