Поделиться через


Начало работы с UITest и Xamarin.Forms

Внимание

Центр приложений Visual Studio планируется выйти на пенсию 31 марта 2025 г. Хотя вы можете продолжать использовать Центр приложений Visual Studio до тех пор, пока он не будет полностью прекращен, существует несколько рекомендуемых вариантов, которые можно перенести.

Дополнительные сведения о временной шкале поддержки и альтернативах.

UITest можно использовать с Xamarin.Forms для записи тестов пользовательского интерфейса для запуска в облаке на сотнях устройств.

Обзор

Служба тестов Центра приложений позволяет разработчикам создавать автоматические тесты пользовательского интерфейса для приложений iOS и Android. После внесения некоторых незначительных изменений приложения Xamarin.Forms можно тестировать с помощью Xamarin.UITest, включая совместное использование одного кода теста. В этой статье приводятся конкретные советы по работе Xamarin.UITest с Xamarin.Forms.

В этом руководстве предполагается, что вы уже знакомы с Xamarin.UITest. Для получения сведений о Xamarin.UITest рекомендуется обратиться к следующим руководствам:

После добавления проекта UITest в решение Xamarin.Forms выполняются действия по написанию и запуску тестов для приложения Xamarin.Forms, аналогичные действиям для приложений Xamarin.Android и Xamarin.iOS.

Требования

Ознакомьтесь с Xamarin.UITest , чтобы убедиться, что проект готов к автоматическому тестированию пользовательского интерфейса.

Добавление поддержки UITest в приложения Xamarin.Forms

UITest автоматизирует пользовательский интерфейс, активируя элементы управления на экране и предоставляя входные данные в любом месте, где пользователь обычно взаимодействует с приложением. Чтобы включить тесты, которые могут нажимать кнопку или вводить текст в поле, коду теста потребуется способ определения элементов управления на экране.

Чтобы код UITest ссылался на элементы управления, каждому элементу управления требуется уникальный идентификатор. В Xamarin.Forms рекомендуется задавать эти идентификаторы при помощи свойства AutomationId, как показано ниже:

var b = new Button {
    Text = "Click me",
    AutomationId = "MyButton"
};
var l = new Label {
    Text = "Hello, Xamarin.Forms!",
    AutomationId = "MyLabel"
};

Свойство AutomationId можно также задать в XAML:

<Button x:Name="b" AutomationId="MyButton" Text="Click me"/>
<Label x:Name="l" AutomationId="MyLabel" Text="Hello, Xamarin.Forms!" />

Примечание.

AutomationId является BindableProperty, поэтому его также можно задать выражением привязки.

Уникальный AutomationId следует добавить всем элементам управления, необходимым для тестирования (включая кнопки, текстовые элементы и метки, для которых может запрашиваться значение).

Предупреждение

Вызывается InvalidOperationException , если предпринята попытка задать AutomationId свойство Element более одного раза.

Проект приложения iOS

Чтобы выполнить тесты в iOS, необходимо добавить в проект пакет NuGet агента Xamarin Test Cloud Agent. После добавления скопируйте следующий код в AppDelegate.FinishedLaunching метод:

#if ENABLE_TEST_CLOUD
// requires Xamarin Test Cloud Agent
Xamarin.Calabash.Start();
#endif

Сборка Calabash использует не общедоступные API Apple, что приводит к отклонению приложений в App Store. Однако компоновщик Xamarin.iOS удалит сборку Calabash из окончательного API, если на него отсутствует явная ссылка из кода.

Примечание.

По умолчанию сборки выпуска не имеют переменной ENABLE_TEST_CLOUD компилятора, что приводит к удалению сборки Calabash из пакета приложений. Однако сборки отладки имеют директиву компилятора, определенную по умолчанию, предотвращая удаление сборки компоновщиком.

На следующем снимке экрана показана переменная компилятора ENABLE_TEST_CLOUD, заданная для сборок отладки:

Проект приложения Android

В отличие от iOS, проекты Android не нуждаются в специальном коде запуска.

Написание тестов пользовательского интерфейса

Сведения о написании тестов пользовательского интерфейса см. в документации по тестам пользовательского интерфейса.

Использование AutomationId в пользовательском интерфейсе Xamarin.Forms

Перед написанием тестов пользовательского интерфейса необходимо убедиться, что пользовательский интерфейс Xamarin.Forms поддерживает сценарии. Все элементы управления в пользовательском интерфейсе должны иметь свойство AutomationId, чтобы на них можно было ссылаться в коде теста.

Ссылка на AutomationId в тестах пользовательского интерфейса

При написании тестов пользовательского интерфейса значение AutomationId на разных платформах предоставляется по-разному:

  • в iOS используется поле id;
  • в Android используется поле label.

Для написания кроссплатформенных тестов пользовательского интерфейса, которые будут находить AutomationId на iOS и Android, используйте запрос теста Marked:

app.Query(c=>c.Marked("MyButton"))

Также работает короткая форма app.Query("MyButton").

Добавление проекта UITest в существующее решение

В Visual Studio есть шаблон, позволяющий добавить проект Xamarin.UITest в существующее решение Xamarin.Forms:

  1. Щелкните решение правой кнопкой мыши и выберите "Файл > нового проекта".

  2. В разделе шаблонов Visual C# выберите категорию Тест. Выберите шаблон кроссплатформенного приложения > тестирования пользовательского интерфейса:

    Добавление проекта

    Этот шаг добавляет новый проект с пакетами NuGet NUnit, Xamarin.UITest и NUnitTestAdapter в решение:

    Диспетчер пакетов NuGet

    NUnitTestAdapter — это сторонний модуль выполнения тестов, позволяющий Visual Studio выполнять тесты NUnit из Visual Studio.

    Новый проект также содержит два класса. AppInitializer содержит код для инициализации и настройки тестов. Другой класс Tests содержит стандартный код для запуска тестов пользовательского интерфейса.

  3. Добавьте ссылку на проект из проекта UITest в проект Xamarin.Android:

    Диспетчер ссылок проекта

    Этот шаг позволяет NUnitTestAdapter запускать UITests для приложения Android из Visual Studio.

После добавления Xamarin.UITest в решение Xamarin.Forms можно создать UITests, запустить их локально и отправить в тест Центра приложений.

Итоги

Приложения Xamarin.Forms можно легко тестировать с помощью Xamarin.UITest, используя простой механизм для предоставления AutomationId в качестве уникального идентификатора вида для автоматизации тестирования. После добавления проекта UITest в решение Xamarin.Forms выполняются действия по написанию и запуску тестов для приложения Xamarin.Forms, аналогичные действиям для приложений Xamarin.Android и Xamarin.iOS.

Сведения о отправке тестов в Центр приложений см. в разделе "Отправка UITests для Xamarin.Android " или отправки UITests для Xamarin.iOS. Дополнительные сведения о компоненте UITest см. в документации по службе тестов Центра приложений.