[英]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
因為Backdoor方法僅限於返回一個字符串,所以我們需要能夠序列化我們的對象。
您需要將Newtonsoft.Json NuGet包添加到每個項目中; 即將Newtonsoft.Json NuGet添加到.NET Standard項目,iOS項目,Android項目和UITest項目中。
這些方法將用於序列化和反序列化對象。
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);
}
}
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);
}
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;
}
在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);
}
在UITest測試方法中,實現靜態方法來檢索數據。
[Test]
public void VerifyData()
{
Assert.IsTrue(GetListData(app).Count == 500);
}
對於仍在問這個問題的人,現在有一個AppQuery.All會更改查詢以返回所有元素而不僅僅是可見元素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.