c# - Xamarin.UITest:如何检索列表中的所有元素

标签 c# xamarin xamarin.ios xamarin.android xamarin.uitest

我有一个包含 500 个元素的列表,当我在页面上使用 app.Query 时,Xamarin.UITest 只给我 6 个元素,因为只有 6 个元素在 UI 中可见。

如何从我的 UITest 中的列表中检索所有 500 个元素?

最佳答案

如上所述,app.Query 的预期行为将只返回页面上所有可见控件的结果。因此,如果控件不可见,app.Query 将不会返回它。

检索列表中所有数据的方法是使用后门方法。

Xamarin 有 additional documentation关于如何在 UITest 中使用后门。

示例应用

此示例应用实现了教程中的片段: https://github.com/brminnick/UITestSampleApp

教程

1。创建可序列化对象

因为后门方法仅限于返回一个字符串,所以我们需要能够序列化我们的对象。

您需要添加 Newtonsoft.Json将 NuGet 打包到您的每个项目;即,将 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。将后门方法添加到 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);
}

关于c# - Xamarin.UITest:如何检索列表中的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41401600/

相关文章:

c# - C# 中的 SetWindowsHookEx

xamarin.ios - Xamarin/Monotouch - NuGet -RequireConsent 错误

visual-studio - 如何(实际上)在 MonoTouch 中重用现有的 .NET 库

ios - Xamarin auth 查看关闭问题

c# - 在 C# foreach 条件中放入查询的效率

c# - 确定时间范围内的时间戳

xamarin.android - 如何从 ViewModel 显示 MvxDialogFragment?

objective-c - Xcode:如何正确构建静态库项目?

c# - 在 winmobile 中带有文本字段的自定义对话框

c# - Xamarin android C# ScrollView OnScrollChanged 事件