簡體   English   中英

Xamarin.UITest:如何檢索列表中的所有元素

[英]Xamarin.UITest: How to Retrieve All Elements in List

我有一個500個元素的列表,當我在頁面上使用app.Query時,Xamarin.UITest只給了我6個元素,因為在UI中只能看到6個元素。

如何從UITest內的列表中檢索所有500個元素?

如上所述, app.Query的預期行為將僅返回頁面上所有可見控件的結果。 因此,如果控件不可見, app.Query將不會返回它。

檢索列表中所有數據的方法是使用后門方法。

Xamarin有關於如何在UITest中使用后門的附加文檔

示例應用程序

此示例應用程序實現了教程中的代碼段: https//github.com/brminnick/UITestSampleApp

教程

1.創建可序列化對象

因為Backdoor方法僅限於返回一個字符串,所以我們需要能夠序列化我們的對象。

您需要將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);
}

對於仍在問這個問題的人,現在有一個AppQuery.All會更改查詢以返回所有元素而不僅僅是可見元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM