Appium Capacidades desejadas para Android emulador
โก Resumo Inteligente
As capacidades desejadas sรฃo os pares chave-valor e Appium O cliente envia um comando ao abrir uma sessรฃo, informando ao servidor qual plataforma, dispositivo, driver e aplicativo o teste automatizado deve utilizar.
Quais sรฃo as capacidades desejadas
As 'Capacidades Desejadas' nos ajudam a modificar o comportamento do servidor durante a automaรงรฃo. Appium ร um mapa hash, ou par chave-valor, usado para enviar um comando para o Appium servidor, onde cada comando do cliente รฉ executado no contexto de uma sessรฃo.
Por exemplo, um cliente envia uma solicitaรงรฃo POST /session contendo um objeto JSON para o Appium servidor.
Assim, para enviar uma solicitaรงรฃo ou manter uma sessรฃo com o servidor, utiliza-se um conjunto de pares de chave e valor. Isso รฉ conhecido como 'Desired Capabilities' (Capacidades Desejadas).
import io.appium.java_client.AppiumDriver; import org.openqa.selenium.remote.DesiredCapabilities; { DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability("deviceName","Android Emulator"); capabilities.setCapability("platformVersion", "4.4"); }
Papel importante da capacidade desejada
- As 'DesiredCapabilities' ajudam o usuรกrio a controlar a solicitaรงรฃo de sessรฃo com o servidor. Por exemplo, para uma sessรฃo iOS, definimos a capacidade platformName = iOS e para uma sessรฃo nรฃo iOS, definimos platformName = ['platformName'] ... Android nomeDaPlataformaDaSessรฃo = Android.
- As 'DesiredCapabilities' sรฃo usadas para configurar a instรขncia do WebDriver, por exemplo. FirefoxDriver, ChromeDriver ou InternetExplorerDriver.
- DesiredCapability รฉ muito รบtil para Selenium Grid. Por exemplo, รฉ usado para executar diferentes casos de teste em navegadores e sistemas operacionais diferentes. Com base na capacidade declarada, o hub do Grid aponta para o nรณ correspondente. Os nรณs sรฃo definidos usando os mรฉtodos de propriedade 'set':
DesiredCapabilities obj = new DesiredCapabilities(); obj.setBrowserName("firefox"); obj.setVersion("18.0.1"); obj.setPlatform(org.openqa.selenium.Platform.WINDOWS);
- Uma funcionalidade desejada รฉ um pacote definido pela biblioteca. Antes de usar 'DesiredCapabilities', ela deve ser importada da biblioteca abaixo.
Org.openqa.selenium.remote.DesiredCapabilities
Appium suporta ambos Android e iOS, portanto, hรก um conjunto separado de Appium Capacidades do servidor para cada plataforma.
A tabela abaixo mostra alguns usos comuns. Android capacidades e valores a serem utilizados.
| Capacidades | Descriรงรฃo | Valores/Usos |
|---|---|---|
| appPacote | Ligue para o nรบmero desejado Java pacote em Android que o usuรกrio deseja executar |
Valor = com.example.myapp/ Obj.setCapability(โappPackageโ, โcom.whatsappโ); |
| atividade do aplicativo | Atividade do aplicativo que o usuรกrio deseja iniciar a partir do pacote. |
Valor = MainActivity, .Settings Obj.setCapability(โappActivityโ, โcom.whatsapp.Mainโ); |
| appWaitPackage | Pacote que o aplicativo precisa aguardar | Valor=com.example.android.myapp |
| appWaitActivity | Qualquer Android atividade que o usuรกrio precisa esperar |
Valor = SplashActivity capacidades.setCapability (โappWaitActivityโ, โcom.example.game.SplashActivityโ) |
NOTA: consulte o Appium documentaรงรฃo para ver mais Android capacidades.
A tabela abaixo mostra algumas funcionalidades do iOS comumente usadas e os valores a serem utilizados.
| Capacidades | Descriรงรฃo | Valores |
|---|---|---|
| Tempo limite de lanรงamento | Tempo total (em ms) de espera pela instrumentaรงรฃo. | 2000 |
| VOCE FEZ | Para identificar o nรบmero de dispositivo exclusivo de um dispositivo fรญsico conectado. | 166aestu4 |
NOTA: consulte o Appium guia de recursos Para visualizar mais recursos do iOS.
Como as capacidades desejadas mudaram em Appium 2
Os exemplos acima sรฃo provenientes de Appium A primeira era ainda mostra o formato de um conjunto de capacidades, mas duas regras foram alteradas e ambas impedirรฃo o inรญcio de uma sessรฃo moderna.
Em primeiro lugar, a especificaรงรฃo WebDriver do W3C define apenas um pequeno conjunto de recursos padrรฃo, dos quais platformName e browserName Este รฉ o ponto principal. Todas as outras funcionalidades sรฃo extensรตes de fornecedor e devem conter um prefixo de namespace terminado em dois pontos. AppiumO prefixo de 's รฉ appium:. Assim deviceName torna-se appium:deviceName e platformVersion torna-se appium:platformVersion. Appium 2 tambรฉm requer appium:automationName, porque os drivers sรฃo instalados separadamente, em vez de serem incluรญdos no pacote do servidor.
Em segundo lugar, repetir o prefixo torna-se tedioso, entรฃo Appium aceita um รบnico appium:options Capacidade cujo valor รฉ um objeto. As capacidades dentro desse objeto nรฃo precisam de prefixo e, quando um nome aparece tanto dentro quanto fora do objeto, o valor interno prevalece.
{
"platformName": "iOS",
"appium:options": {
"automationName": "XCUITest",
"platformVersion": "16.0",
"app": "/path/to/your.app",
"deviceName": "iPhone 12",
"noReset": true
}
}
โ ๏ธ Nota de versรฃo: na Java lado, Selenium 4 e Appium Java O cliente 8 descontinuou o DesiredCapabilities Classe mostrada anteriormente. Construtores especรญficos do driver herdados de BaseOptions substitua-o โ UiAutomator2Options pela Android e XCUITestOptions para iOS โ com um mapa um para umping de cada velho setCapability chamada. O cรณdigo original acima รฉ mantido aqui como exemplo histรณrico.
ExtracInformaรงรตes sobre pacotes e atividades
Pacotes sรฃo arquivos ou classes agrupados. Eles fornecem uma estrutura organizada para a programaรงรฃo modular. JavaEm aplicaรงรตes mรณveis, diferentes pacotes sรฃo armazenados em um รบnico arquivo JAR, e o usuรกrio pode chamar esse JAR para execuรงรฃo completa. Um conceito semelhante รฉ seguido no desenvolvimento de aplicaรงรตes mรณveis.
De acordo com o relatรณrio Android sistema operacional, todos os aplicativos sรฃo instalados na forma de Java pacotes. Entรฃo, para extracinformaรงรตes do caminho do pacote t, o Android A classe PackageManager รฉ usada.
Ele recupera informaรงรตes sobre pacotes e atividades de aplicativos prรฉ-instalados e pรณs-instalados no dispositivo.
Vocรช pode obter uma instรขncia da classe PackageManager chamando o mรฉtodo getPackageManager(). Esse mรฉtodo permite acessar e manipular os pacotes e as permissรตes relacionadas dos aplicativos instalados.
Por exemplo:
PackageManager pManager = getPackageManager();
List<ApplicationInfo> list = pManager.getInstalledApplications(PackageManager.GET_META_DATA)
Como encontrar appPackage e appActivity com adb
A rota do PackageManager acima funciona de dentro de um aplicativo. Como testador, vocรช geralmente tem apenas a versรฃo instalada, entรฃo o caminho mais rรกpido รฉ uma consulta sobre adb contra um dispositivo conectado ou emulador.
Abra o aplicativo manualmente no dispositivo e, em seguida, execute um dos comandos abaixo em um terminal na pasta platform-tools. O comando imprime a janela que estรก em foco no momento e o valor รฉ formatado como package/activity.
adb shell dumpsys window | find "mCurrentFocus" adb shell dumpsys window windows | grep -i "mCurrentFocus"
Use o primeiro formulรกrio no Windows prompt de comando e o segundo em um shell Unix ou Git Bash. Leia o resultado como duas metades: tudo antes da barra รฉ o valor de appPackagee tudo o que vem depois รฉ o valor de appActivity.
Duas ressalvas se aplicam. A atividade em foco รฉ aquela que estรก na tela naquele momento, que nem sempre รฉ a atividade com a qual o aplicativo inicia โ se uma sessรฃo falhar durante a inicializaรงรฃo do driver, inicie o aplicativo novamente e leia o valor mais uma vez. E se uma tela de apresentaรงรฃo (splash screen) aparecer primeiro, a atividade de entrada serรก diferente daquela que vocรช deseja usar para a verificaรงรฃo, que รฉ exatamente o caso. appWaitActivity existe para.
Uma alternativa visual รฉ uiautomatorviewer, que captura a hierarquia atual da tela e mostra o pacote e a classe de cada nรณ.
Erros comuns nas capacidades desejadas e como corrigi-los
A maioria falhou Appium As sessรตes sรฃo encerradas antes da execuรงรฃo de qualquer etapa de teste, e a causa quase sempre estรก no conjunto de recursos, e nรฃo no teste em si. A tabela abaixo relaciona cada mensagem ร sua respectiva soluรงรฃo.
| Mensagem | Causa provรกvel | Fixar |
| Capacidade do WebDriver invรกlida ou nรฃo suportada | Uma funcionalidade nรฃo padrรฃo foi enviada sem o prefixo do fornecedor. | Adicione `appium:` a ele ou mova-o para dentro de `appium:options`. |
| As funcionalidades desejadas devem incluir um nome de automaรงรฃo ou um nome de plataforma. | Appium 2 nรฃo pode escolher um motorista | Defina platformName e appium:automationName explicitamente. |
| Nรฃo foi possรญvel iniciar o aplicativo. Erro original: a atividade usada para iniciar o aplicativo nรฃo existe. | appActivity nรฃo corresponde ao manifesto. | Releia o valor com o comando dumpsys acima. |
| A sessรฃo nรฃo foi iniciada: nenhum dispositivo encontrado. | Nรฃo hรก emulador ou aparelho conectado. | Confirme o dispositivo com o comando `adb devices` antes de iniciar. |
| Nรฃo foi possรญvel criar uma nova sessรฃo apรณs o tempo limite. | Uma tela inicial atrasa a atividade de entrada. | Defina appWaitActivity e aumente appWitDuration. |
| O estado da aplicaรงรฃo nรฃo รฉ redefinido entre execuรงรตes. | O comportamento de reinicializaรงรฃo padrรฃo foi alterado. | RevVerifique appium:noReset e appium:fullReset para a execuรงรฃo desejada. |
Quando uma sessรฃo se recusar a iniciar, leia o Appium log do servidor em vez da pilha do cliente trace. O servidor indica qual funcionalidade nรฃo pรดde ser atendida, e essa linha especifica a soluรงรฃo.
