

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

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

 L'accesso remoto consente di eseguire gesti, operazioni di scorrimento e di interagire con un dispositivo tramite browser Web in tempo reale per testare la funzionalità e riprodurre i problemi dei clienti. Puoi interagire con un dispositivo specifico creando una sessione di accesso remoto con quel dispositivo.

Una sessione in Device Farm è un'interazione in tempo reale con un dispositivo fisico effettivo ospitato in un browser web. Una sessione mostra il singolo dispositivo selezionato all'avvio della sessione. Un utente può avviare più di una sessione alla volta con il numero totale di dispositivi simultanei tenendo conto del limite del numero di slot dei dispositivi di cui dispone. Puoi acquistare slot dei dispositivi in base alla famiglia di dispositivi (Android o iOS). Per ulteriori informazioni, consulta [Prezzi di Device Farm](https://aws.amazon.com/device-farm/pricing/). 

Device Farm offre attualmente un sottoinsieme di dispositivi per il test di accesso remoto. Nuovi dispositivi vengono costantemente aggiunti al pool di dispositivi.

Device Farm acquisisce il video di ogni sessione di accesso remoto e genera registri delle attività durante la sessione. I risultati includono qualsiasi informazione che fornisci durante una sessione.

**Nota**  
Per motivi di sicurezza, ti consigliamo di non fornire o inserire informazioni sensibili come numeri di conti, login personale e altri dati durante una sessione di accesso remoto. Se possibile, utilizza alternative sviluppate specificamente per i test, come gli account di test.

**Topics**
+ [Creazione di una sessione di accesso remoto in AWS Device Farm](how-to-create-session.md)
+ [Utilizzo di una sessione di accesso remoto in AWS Device Farm](how-to-use-session.md)
+ [Recupero dei risultati di una sessione di accesso remoto in AWS Device Farm](how-to-access-session-results.md)

# Creazione di una sessione di accesso remoto in AWS Device Farm
<a name="how-to-create-session"></a>

Per ulteriori informazioni sulle sessioni di accesso remoto, consulta [Sessioni](sessions.md).
+ [Prerequisiti](#how-to-create-session-prerequisites)
+ [Crea una sessione remota](#how-to-create-remote-session)
+ [Fasi successive](#how-to-create-session-next-steps)

## Prerequisiti
<a name="how-to-create-session-prerequisites"></a>
+ Crea un progetto in Device Farm. Segui le istruzioni riportate in [Creazione di un progetto in AWS Device Farm](how-to-create-project.md), poi torna a questa pagina.

## Crea una sessione remota
<a name="how-to-create-remote-session"></a>

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

1. Accedere alla console Device Farm all'indirizzo [https://console.aws.amazon.com/devicefarm.](https://console.aws.amazon.com/devicefarm)

1. Nel pannello di navigazione di Device Farm, scegli **Mobile Device Testing**, quindi scegli **Progetti**.

1. Se hai già un progetto, selezionalo dall'elenco. Altrimenti, crea un progetto seguendo le istruzioni riportate in[Creazione di un progetto in AWS Device Farm](how-to-create-project.md).

1. Nella scheda **Accesso remoto**, scegli **Crea sessione di accesso remoto**.

1. Selezionare un dispositivo per la propria sessione. Puoi scegliere dall'elenco dei dispositivi disponibili o cercare un dispositivo utilizzando la barra di ricerca nella parte superiore dell'elenco.

1. *(Facoltativo)* Includi un'app e app ausiliarie come parte della sessione. Queste possono essere app caricate di recente o app caricate in precedenza in questo progetto negli ultimi 30 giorni (dopo 30 giorni, i caricamenti delle app [scadranno](data-protection.md#data-protection-retention)).

1. In **Session name (Nome sessione)**, immettere un nome per la sessione.

1. Selezionare **Confirm and start session (Conferma e avvia sessione)**.

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

*Nota: queste istruzioni si concentrano solo sulla creazione di una sessione di accesso remoto. Per istruzioni su come caricare un'app da utilizzare durante la sessione, consulta [Automatizzare i caricamenti delle app](api-ref.md#upload-example).*

Innanzitutto, verifica che la tua versione CLI di AWS sia disponibile up-to-date [scaricando e installando la versione più recente](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html).

**Importante**  
Alcuni comandi menzionati in questo documento non sono disponibili nelle versioni precedenti dell'interfaccia a riga di comando di AWS.

Quindi, puoi determinare su quale dispositivo desideri eseguire il test:

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

Questo mostrerà un output come il seguente:

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

Quindi, puoi creare la tua sessione di accesso remoto con un ARN del dispositivo a tua scelta:

```
$ 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"
      ]
  }'
```

Questo mostrerà un output come il seguente:

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

Ora, facoltativamente, possiamo effettuare un sondaggio e attendere che la sessione sia pronta:

```
$ 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 ]

*Nota: queste istruzioni si concentrano solo sulla creazione di una sessione di accesso remoto. Per istruzioni su come caricare un'app da utilizzare durante la sessione, consulta [Automatizzare i caricamenti delle app](api-ref.md#upload-example).*

Questo esempio trova innanzitutto qualsiasi dispositivo Google Pixel disponibile su Device Farm, quindi crea una sessione di accesso remoto con esso e attende l'esecuzione della sessione.

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

*Nota: queste istruzioni si concentrano solo sulla creazione di una sessione di accesso remoto. Per istruzioni su come caricare un'app da utilizzare durante la sessione, consulta [Automatizzare i caricamenti delle app](api-ref.md#upload-example).*

*Nota: questo esempio utilizza l'SDK AWS per Java v2 ed è compatibile con le versioni JDK 11 e successive.*

Questo esempio trova innanzitutto qualsiasi dispositivo Google Pixel disponibile su Device Farm, quindi crea una sessione di accesso remoto con esso e attende l'esecuzione della sessione.

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

*Nota: queste istruzioni si concentrano solo sulla creazione di una sessione di accesso remoto. Per istruzioni su come caricare un'app da utilizzare durante la sessione, consulta [Automatizzare i caricamenti delle app](api-ref.md#upload-example).*

*Nota: questo esempio utilizza AWS SDK per JavaScript v3.*

Questo esempio trova innanzitutto qualsiasi dispositivo Google Pixel disponibile su Device Farm, quindi crea una sessione di accesso remoto con esso e attende l'esecuzione della sessione.

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

*Nota: queste istruzioni si concentrano solo sulla creazione di una sessione di accesso remoto. Per istruzioni su come caricare un'app da utilizzare durante la sessione, consulta [Automatizzare i caricamenti delle app](api-ref.md#upload-example).*

Questo esempio trova innanzitutto qualsiasi dispositivo Google Pixel disponibile su Device Farm, quindi crea una sessione di accesso remoto con esso e attende l'esecuzione della sessione.

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

*Nota: queste istruzioni si concentrano solo sulla creazione di una sessione di accesso remoto. Per istruzioni su come caricare un'app da utilizzare durante la sessione, consulta [Automatizzare i caricamenti delle app](api-ref.md#upload-example).*

Questo esempio trova innanzitutto qualsiasi dispositivo Google Pixel disponibile su Device Farm, quindi crea una sessione di accesso remoto con esso e attende l'esecuzione della sessione.

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

------

## Fasi successive
<a name="how-to-create-session-next-steps"></a>

Device Farm avvia la sessione non appena il dispositivo e l'infrastruttura richiesti sono disponibili, in genere entro pochi minuti. La finestra di dialogo **Device** Requested viene visualizzata fino all'avvio della sessione. Per annullare la richiesta di sessione, selezionare **Cancel request (Annulla richiesta)**. 

Se il dispositivo selezionato non è disponibile o occupato, lo stato della sessione viene visualizzato come **Dispositivo in sospeso**, a indicare che potrebbe essere necessario attendere qualche istante prima che il dispositivo sia disponibile per il test.

**Se il tuo account ha raggiunto il limite di contemporaneità per i dispositivi pubblici con o senza contabilizzazione, lo stato della sessione viene visualizzato come In sospeso.** [Per quanto riguarda gli slot per dispositivi illimitati, puoi aumentare la concorrenza acquistando più slot per dispositivi.](how-to-purchase-device-slots.md) Per pay-as-you-go i dispositivi a consumo, contatta AWS tramite un ticket di supporto per richiedere [un aumento della quota di servizio](limits.md).

Quando inizia la configurazione della sessione, mostra prima lo stato In **corso**, quindi lo stato di **Connessione** mentre il browser Web locale tenta di aprire una connessione remota al dispositivo.

Dopo che una sessione viene avviata, se chiudi il browser o la scheda del browser senza arrestare la sessione o se la connessione tra il browser e Internet viene persa, la sessione rimarrà attiva per cinque minuti da quel momento. Dopodiché, Device Farm termina la sessione. Il tuo account verrà addebitato per i tempi di inattività. 

Dopo l'inizio della sessione, puoi interagire con il dispositivo nel browser web o testare il dispositivo utilizzando [Appium](appium-endpoint.md).

# Utilizzo di una sessione di accesso remoto in AWS Device Farm
<a name="how-to-use-session"></a>

Per informazioni sull'esecuzione dei test interattivi delle app Android e iOS tramite le sessioni di accesso remoto, consulta [Sessioni](sessions.md).
+ [Prerequisiti](#how-to-use-session-prerequisites)
+ [Utilizzare una sessione nella console Device Farm](#how-to-use-session-console)
+ [Fasi successive](#how-to-use-session-next-steps)
+ [Suggerimenti e trucchi](#how-to-use-session-tips)

## Prerequisiti
<a name="how-to-use-session-prerequisites"></a>
+ Crea una sessione. Segui le istruzioni riportate in [Creazione di una sessione](how-to-create-session.md), poi torna a questa pagina.

## Utilizzare una sessione nella console Device Farm
<a name="how-to-use-session-console"></a>

Quando il dispositivo che hai richiesto per una sessione di accesso remoto diventa disponibile, la console mostra lo schermo del dispositivo. La sessione ha una durata massima di 150 minuti. Il tempo rimanente nella sessione viene visualizzato nel campo **Tempo rimasto** accanto al nome del dispositivo.

### Installazione di un'applicazione
<a name="how-to-use-session-install-app"></a>

Per installare un'applicazione sul dispositivo di sessione, in **Installa applicazioni**, seleziona **Scegli file**, quindi scegli il file.apk (Android) o il file.ipa (iOS) che desideri installare. Le applicazioni che esegui in una sessione di accesso remoto non richiedono alcuna strumentazione di test o provisioning.

**Nota**  
Quando carichi un'app, a volte potrebbe essere disponibile con un po' di ritardo. Apparirà un messaggio di conferma per informarti se l'app è stata installata correttamente o meno.

### Controllo del dispositivo
<a name="how-to-use-session-control-device"></a>

Puoi interagire in remoto con il dispositivo visualizzato nella console con le stesse modalità del dispositivo fisico, usando il mouse o altro dispositivo touch e la tastiera su schermo. Per i dispositivi Android, sono presenti pulsanti in **View controls (Visualizza controlli)** che hanno la stessa funzione dei pulsanti **Home** e **Back (Indietro)** di un dispositivo Android. Per i dispositivi iOS, è presente un pulsante **Home** che ha la stessa funzione del pulsante Home su un dispositivo iOS. Puoi anche passare da un'applicazione all'altra in esecuzione sul dispositivo scegliendo **App recenti**.

### Passaggio dalla modalità verticale a quella orizzontale
<a name="how-to-use-session-switch-between-portrait-landscape-mode"></a>

Puoi anche passare dalla modalità ritratto (verticale) a quella orizzontale (orizzontale) per i dispositivi che stai utilizzando. 

## Fasi successive
<a name="how-to-use-session-next-steps"></a>

Device Farm continua la sessione finché non viene interrotta manualmente o non viene raggiunto il limite di 150 minuti. Per terminare la sessione, scegli **Arresta sessione**. Una volta interrotta la sessione puoi accedere al video acquisito e ai log generati. Per ulteriori informazioni, consulta [Recupero dei risultati della sessione](how-to-access-session-results.md).

## Suggerimenti e trucchi
<a name="how-to-use-session-tips"></a>

In alcune AWS regioni potrebbero verificarsi problemi di prestazioni con la sessione di accesso remoto. Ciò è dovuto in parte alla latenza che si verifica in alcune regioni. In caso di problemi a livello di prestazioni, concedi alla sessione di accesso remoto il tempo di recuperare prima di interagire nuovamente con l'app.

# Recupero dei risultati di una sessione di accesso remoto in AWS Device Farm
<a name="how-to-access-session-results"></a>

Per informazioni sulle sessioni, consulta [Sessioni](sessions.md).
+ [Prerequisiti](#how-to-access-session-results-prerequisites)
+ [Visualizzazione dei dettagli della sessione](#how-to-view-session-details)
+ [Scaricamento del video o dei registri della sessione](#how-to-access-session-files)

## Prerequisiti
<a name="how-to-access-session-results-prerequisites"></a>
+ Completa una sessione. Segui le istruzioni riportate in [Utilizzo di una sessione di accesso remoto in AWS Device FarmUtilizzo di una sessione](how-to-use-session.md), poi torna a questa pagina.

## Visualizzazione dei dettagli della sessione
<a name="how-to-view-session-details"></a>

Al termine di una sessione di accesso remoto, la console Device Farm visualizza una tabella che contiene dettagli sull'attività durante la sessione. Per ulteriori informazioni, consulta [Analisi delle informazioni di log](how-to-use-reports.md#how-to-use-reports-console-log).

Per tornare ai dettagli di una sessione in un secondo momento:

1. Nel pannello di navigazione di Device Farm, scegli **Mobile Device Testing**, quindi scegli **Progetti**.

1. Scegliete il progetto contenente la sessione.

1. Scegli **Accesso remoto**, quindi scegli la sessione che desideri rivedere dall'elenco.

## Scaricamento del video o dei registri della sessione
<a name="how-to-access-session-files"></a>

Al termine di una sessione di accesso remoto, la console Device Farm fornisce l'accesso a un'acquisizione video della sessione e dei registri delle attività. Nei risultati della sessione, selezionare la scheda **Files (File)** per un elenco di collegamenti ai log e video della sessione. È possibile visualizzare questi file all'interno del browser o salvarli in locale.