C# Xamarin.UITest:如何检索列表中的所有元素
我有一个500个元素的列表,当我在页面上使用C# Xamarin.UITest:如何检索列表中的所有元素,c#,xamarin,xamarin.ios,xamarin.android,xamarin.uitest,C#,Xamarin,Xamarin.ios,Xamarin.android,Xamarin.uitest,我有一个500个元素的列表,当我在页面上使用app.Query时,Xamarin.UITest只给我6个元素,因为在UI中只有6个元素可见 如何从UITest内的列表中检索所有500个元素?如上所述,app.Query的预期行为将只返回页面上所有可见控件的结果。因此,如果控件不可见,app.Query将不会返回它 检索列表中所有数据的方法是使用后门方法 Xamarin对如何在UITest中使用后门进行了详细介绍 示例应用程序 此示例应用程序实现教程中的代码段: 辅导的 1.创建可序列化的对象
app.Query
时,Xamarin.UITest只给我6个元素,因为在UI中只有6个元素可见
如何从UITest内的列表中检索所有500个元素?如上所述,
app.Query
的预期行为将只返回页面上所有可见控件的结果。因此,如果控件不可见,app.Query
将不会返回它
检索列表中所有数据的方法是使用后门方法
Xamarin对如何在UITest中使用后门进行了详细介绍
示例应用程序
此示例应用程序实现教程中的代码段:
辅导的
1.创建可序列化的对象
因为后门方法仅限于返回字符串,所以我们需要能够序列化对象
您需要将NuGet包添加到每个项目中;i、 e.将Newtonsoft.Json NuGet添加到.NET标准项目、iOS项目、Android项目和UITest项目中
2.创建静态方法来序列化对象
这些方法将用于序列化和反序列化对象
使用Newtonsoft.Json;
公共静态类转换器帮助器
{
公共静态字符串序列化对象(对象值)
{
返回JsonConvert.SerializeObject(值);
}
公共静态T反序列化对象(字符串值)
{
返回JsonConvert.DeserializeObject(值);
}
}
3.将后门方法添加到AppDelegate
AppDelegate
中的此方法将公开iOS应用程序的后门,UITest可以利用此后门
如果您没有iOS应用程序,请跳过此步骤
[导出(“getDataAsString:”)]
公共NSString GetDataAsString(NSString noValue)
{
var data=[在此处添加代码以从应用程序检索数据]
var dataAsString=converterhelp.serialized对象(数据);
返回新的NSString(dataAsString);
}
4.将后门方法添加到MainActivity或应用程序类
main活动
(或应用程序
类,如果您有)中的此方法将从您的Android应用程序中公开UITest可以利用的后门
如果您没有Android应用程序,请跳过此步骤
[导出(“GetDataAsString”)]
公共字符串GetDataAsString()
{
var data=[在此处添加代码以从应用程序检索数据]
var dataAsBase64String=converterhelp.serialized对象(数据);
返回dataAsBase64String;
}
5.创建静态方法从UITest调用后门
在UITest项目中创建一个静态方法,从UITest调用后门方法
内部静态列表GetListData(IApp应用程序)
{
字符串数据字符串;
如果(应用程序是iOSApp)
dataAsString=app.Invoke(“getDataAsString:,”).ToString();
其他的
dataAsString=app.Invoke(“GetDataAsString”).ToString();
返回ConverterHelpers.DeserializeObject(dataAsString);
}
6.从UITest调用后门
在UITest测试方法中,实现静态方法来检索数据
[测试]
public void VerifyData()
{
Assert.IsTrue(GetListData(app.Count==500);
}
对于仍在问这个问题的人,现在有一种方法可以改变查询以返回所有元素,而不仅仅是可见元素。我只在Android上尝试过,但我从来没有让all()
为我工作过-它只返回可见元素,但重复了。它真的对你有用吗?