Как описано выше, ожидаемое поведение app.Query
будет возвращать только результаты всех видимых элементов управления на странице. Таким образом, если элемент управления не виден, app.Query
не вернет его.
Чтобы получить все данные в списке, нужно использовать бэкдор-метод.
В Xamarin есть дополнительный документация о том, как использовать бэкдоры в UITest.
Пример приложения
В этом примере приложения реализованы фрагменты из руководства: https://github.com/brminnick/UITestSampleApp.
Руководство
1. Создайте сериализуемый объект
Поскольку методы Backdoor ограничены возвратом строки, нам нужно будет иметь возможность сериализовать наш объект.
Вам потребуется добавить пакет NuGet Newtonsoft.Json в каждый из ваших проектов; то есть добавьте Newtonsoft.Json NuGet в проект .NET Standard, проект iOS, проект Android и проект UITest.
2. Создайте статические методы для сериализации объекта
Эти методы будут использоваться для сериализации и десериализации объекта.
using Newtonsoft.Json;
public static class ConverterHelpers
{
public static string SerializeObject(object value)
{
return JsonConvert.SerializeObject(value);
}
public static T DeserializeObject<T>(string value)
{
return JsonConvert.DeserializeObject<T>(value);
}
}
3. Добавьте метод бэкдора в AppDelegate
Этот метод в AppDelegate
раскрывает бэкдор из вашего приложения iOS, который может использовать UITest.
Если у вас нет приложения для iOS, пропустите этот шаг.
[Export("getDataAsString:")]
public NSString GetDataAsString(NSString noValue)
{
var data = [Add code here to retrieve the data from your app]
var dataAsString = ConverterHelpers.SerializeObject(data);
return new NSString(dataAsString);
}
4. Добавьте метод Backdoor в класс MainActivity или Application.
Этот метод в классе MainActivity
(или в классе Application
, если он у вас есть) выявит лазейку из вашего Android-приложения, которую может использовать UITest.
Если у вас нет приложения для Android, пропустите этот шаг.
[Export("GetDataAsString")]
public string GetDataAsString()
{
var data = [Add code here to retrieve the data from your app]
var dataAsBase64String = ConverterHelpers.SerializeObject(data);
return dataAsBase64String;
}
5. Создайте статический метод для вызова бэкдоров из UITest
Создайте статический метод в проекте UITest для вызова бэкдор-методов из UITest.
internal static List<DataModel> GetListData(IApp app)
{
string dataAsString;
if (app is iOSApp)
dataAsString = app.Invoke("getDataAsString:", "").ToString();
else
dataAsString = app.Invoke("GetDataAsString").ToString();
return ConverterHelpers.DeserializeObject<List<DataModel>>(dataAsString);
}
6. Вызвать бэкдор из UITest
В тестовом методе UITest реализуйте статический метод для извлечения данных.
[Test]
public void VerifyData()
{
Assert.IsTrue(GetListData(app).Count == 500);
}
person
Brandon Minnick
schedule
30.12.2016