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.

Saiba mais sobre cronogramas e alternativas de suporte.

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:

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:

  1. Clique com o botão direito do mouse na solução e selecione Arquivo > Novo Projeto.

  2. Dos modelos do Visual C#, selecione a categoria Teste. Selecione o modelo de plataforma cruzada do aplicativo > de teste da interface do usuário:

    Adicionar novo projeto

    Esta etapa adiciona um novo projeto com os pacotes NuGet NUnit, Xamarin.UITest e NUnitTestAdapter à solução:

    Gerenciador de Pacotes NuGet

    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.

  3. Adicione uma referência de projeto do projeto UITest ao projeto Xamarin.Android:

    Gerenciador de Referências do Projeto

    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.