Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Xamarin.UITest:如何检索列表中的所有元素_C#_Xamarin_Xamarin.ios_Xamarin.android_Xamarin.uitest - Fatal编程技术网

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

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.创建可序列化的对象

我有一个500个元素的列表,当我在页面上使用
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()
为我工作过-它只返回可见元素,但重复了。它真的对你有用吗?