Introdução ao UITest e ao Xamarin.Forms
Importante
O Visual Studio App Center está programado para aposentadoria em 31 de março de 2025. Embora você possa continuar a usar o Visual Studio App Center até que ele seja totalmente desativado, há várias alternativas recomendadas para as quais você pode considerar a migração.
O UITest pode ser usado com o Xamarin.Forms para gravar testes de interface do usuário para execução na nuvem em centenas de dispositivos.
Visão geral
O Teste do App Center permite aos desenvolvedores gravar testes de interface do usuário automatizados para aplicativos iOS e Android. Com alguns ajustes secundários, os aplicativos Xamarin.Forms podem ser testados usando o Xamarin.UITest, incluindo o compartilhamento do mesmo código de teste. Esse artigo apresenta dicas específicas para que o Xamarin.UITest opere com o Xamarin.Forms.
Esse guia pressupõe que você tenha familiaridade com o Xamarin.UITest. Os guias a seguir são recomendados para que você obtenha familiaridade com o Xamarin.UITest:
- Introdução ao Teste do App Center
- Introdução ao UITest para Xamarin.Android
- Introdução ao UITest para Xamarin.iOS
Uma vez que o projeto UITest tenha sido adicionado a uma solução do Xamarin.Forms, as etapas para gravação e execução dos testes em um aplicativo Xamarin.Forms serão as mesmas de um aplicativo Xamarin.Android ou Xamarin.iOS.
Requisitos
Consulte Xamarin.UITest para confirmar se seu projeto está pronto para testes automatizados de interface do usuário.
Adicionando suporte a UITest a aplicativos Xamarin.Forms
O UITest automatiza a interface do usuário ativando controles na tela e fornecendo entrada em qualquer lugar que um usuário normalmente interagiria com o aplicativo. Para habilitar os testes que podem pressionar um botão ou inserir texto em uma caixa, o código de teste precisará de uma maneira para identificar os controles na tela.
Para habilitar o código UITest para fazer referência aos controles, cada controle precisa de um identificador exclusivo. No Xamarin.Forms, a maneira recomendada para definir esse identificador é usando a propriedade AutomationId
, conforme mostrado abaixo:
var b = new Button {
Text = "Click me",
AutomationId = "MyButton"
};
var l = new Label {
Text = "Hello, Xamarin.Forms!",
AutomationId = "MyLabel"
};
A propriedade AutomationId
também pode ser definida no XAML:
<Button x:Name="b" AutomationId="MyButton" Text="Click me"/>
<Label x:Name="l" AutomationId="MyLabel" Text="Hello, Xamarin.Forms!" />
Observação
AutomationId
é um BindableProperty
e, portanto, também pode ser definida com uma expressão de associação.
Um único AutomationId
deve ser adicionado a todos os controles que são necessários para teste (incluindo botões, entradas de texto e rótulos, cujo valor pode precisar ser consultado).
Aviso
Um InvalidOperationException
será lançado se uma tentativa for feita para definir a AutomationId
propriedade de um Element
mais de uma vez.
Projeto de aplicativo iOS
Para executar testes no iOS, o pacote NuGet do Xamarin Test Cloud Agent deve ser adicionado ao projeto. Depois de adicionado, copie o seguinte código para o AppDelegate.FinishedLaunching
método:
#if ENABLE_TEST_CLOUD
// requires Xamarin Test Cloud Agent
Xamarin.Calabash.Start();
#endif
O conjunto Calabash usa APIs não públicas da Apple, o que faz com que os aplicativos sejam rejeitados pela App Store. No entanto, o vinculador Xamarin.iOS removerá o assembly Calabash da IPA final se ela não tiver sido referenciada de forma explícita do código.
Observação
Por padrão, as compilações de versão não têm a variável compilador, o ENABLE_TEST_CLOUD
que faz com que o assembly Calabash seja removido do pacote de aplicativos. No entanto, as compilações de depuração têm a diretiva do compilador definida por padrão, impedindo que o vinculador remova o assembly.
A captura de tela a seguir mostra a variável do compilador ENABLE_TEST_CLOUD
definida para os builds da depuração:
Projeto de aplicativo Android
Ao contrário do iOS, os projetos Android não precisam de nenhum código de inicialização especial.
Gravando UITests
Para obter informações sobre como gravar UITests, consulte a Documentação do UITest.
Usar o AutomationId na interface do usuário do Xamarin.Forms
Antes que quaisquer UITests possam ser gravados, a interface do usuário do aplicativo Xamarin.Forms deve ser passível de script. Verifique se todos os controles na interface do usuário têm um AutomationId
para que eles possam ser referenciados no código de teste.
Consultando a AutomationId nos UITests
Ao gravar UITests, o valor de AutomationId
é exposto de forma diferente em cada plataforma:
- O iOS usa o campo
id
. - O Android usa o campo
label
.
Para gravar UITests de plataforma cruzada que encontrarão o AutomationId
tanto no iOS quanto no Android, use a consulta de teste Marked
:
app.Query(c=>c.Marked("MyButton"))
A forma mais curta app.Query("MyButton")
também funciona.
Adicionando um projeto UITest a uma solução existente
O Visual Studio tem um modelo para ajudar a adicionar um projeto Xamarin.UITest em uma solução do Xamarin.Forms existente:
Clique com o botão direito do mouse na solução e selecione Arquivo > Novo Projeto.
Dos modelos do Visual C#, selecione a categoria Teste. Selecione o modelo de plataforma cruzada do aplicativo > de teste da interface do usuário:
Esta etapa adiciona um novo projeto com os pacotes NuGet NUnit, Xamarin.UITest e NUnitTestAdapter à solução:
O NUnitTestAdapter é um executor de teste de terceiros que permite que o Visual Studio execute testes NUnit do Visual Studio.
O novo projeto também tem duas classes. O AppInitializer contém o código para auxiliar os testes de inicialização e instalação. A outra classe, Testes, contém o código clichê para ajudar a iniciar o UITests.
Adicione uma referência de projeto do projeto UITest ao projeto Xamarin.Android:
Esta etapa permite que o NUnitTestAdapter execute os UITests para o aplicativo Android do Visual Studio.
Depois de adicionar o Xamarin.UITest à solução Xamarin.Forms, é possível criar UITests, executá-las localmente e enviá-las ao Teste do App Center.
Resumo
Os aplicativos do Xamarin.Forms podem ser facilmente testados com o Xamarin.UITest usando um mecanismo simples para expor o AutomationId
como um identificador de exibição exclusivo para a automação de teste. Uma vez que o projeto UITest tenha sido adicionado a uma solução do Xamarin.Forms, as etapas para gravação e execução dos testes em um aplicativo Xamarin.Forms serão as mesmas de um aplicativo Xamarin.Android ou Xamarin.iOS.
Para obter informações sobre como enviar testes para o Teste do App Center, consulte Enviando UITests para Xamarin.Android ou Enviando UITests para Xamarin.iOS. Para obter informações sobre o UITest, consulte a documentação do Teste do App Center.