我已经使用Xamarin UITest框架为我的Xamarin应用程序创建了自动的Android和Xamarin UI-Test。当在本地运行测试时,它们工作得很好,但是当在Bitrise CI上运行它们时,iOS测试运行得很好,但Android UI测试总是失败,出现以下异常:
StartFirstActivity_WaitForActivity_ExpectButtonToHaveText
SetUp : System.Exception : Timed out waiting for result of ClearAppData2
Stack trace:
at Xamarin.UITest.Shared.Android.Commands.CommandAdbClearAppData.Execute (IProcessRunner processRunner, IAndroidSdkTools androidSdkTools) <0x38b3e90 + 0x0064b> in <filename unknown>:0
at Xamarin.UITest.Shared.Execution.Executor.Execute[TDep1,TDep2] (ICommand2 command) <0x32b6478 + 0x00092> in <filename unknown>:0
at Xamarin.UITest.Shared.Android.LocalAndroidAppLifeCycle.EnsureInstalled (Xamarin.UITest.Shared.Android.ApkFile appApkFile, Xamarin.UITest.Shared.Android.ApkFile testServerApkFile) <0x37418c8 + 0x0017a> in <filename unknown>:0
at Xamarin.UITest.Android.AndroidApp..ctor (IAndroidAppConfiguration appConfiguration) <0x31a15e8 + 0x0047a> in <filename unknown>:0
at Xamarin.UITest.Configuration.AndroidAppConfigurator.StartApp (AppDataMode appDataMode) <0x30b4298 + 0x00063> in <filename unknown>:0
at SightPlayer.Core.Test.AppInitializer.StartApp (Platform platform) <0x30b2448 + 0x000ef> in <filename unknown>:0
at SightPlayer.Core.Test.Tests.BeforeEachTest () <0x30b23f8 + 0x00013> in <filename unknown>:0
at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&)
at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) <0x30b2208 + 0x00093> in <filename unknown>:0安卓测试运行在Xamarin.UITest版本1.3.5上。这一点很重要,因为似乎已经有了bug until version 1.3.3。我也尝试过忽略失败的测试,但是测试运行程序在其他Android测试中失败了。有趣的是,有时单个测试都会通过。
以前有没有人遇到过这种行为?你对如何解决这个问题有什么建议吗?
在反编译CommandAdbClearAppData (抛出异常)时,我看到
// ISSUE: reference to a compiler-generated field
string str1 = string.Format("/data/data/{0}/files/calabash_failure.out", (object)executeCAnonStorey0.svr);
// ISSUE: reference to a compiler-generated field
string str2 = string.Format("/data/data/{0}/files/calabash_finished.out", (object)executeCAnonStorey0.svr);
while (DateTime.UtcNow < utcNow + TimeSpan.FromSeconds(10.0))
{
if (func(string.Format("ls {0}", (object)str1)).Output.Trim().Equals(str1))
throw new Exception("Clear app data failed with " + func(string.Format("cat {0}", (object)str1)).Output);
if (func(string.Format("ls {0}", (object)str2)).Output.Trim().Equals(str2) && func(string.Format("cat {0}", (object)str2)).Output.Trim().Equals("SUCCESSFUL"))
return;
}
throw new Exception("Timed out waiting for result of ClearAppData2");这表明在10秒内找不到生成的文件。会不会是模拟器太慢了,模拟器创建这些文件的时间超过了10秒?
发布于 2016-04-04 15:16:14
我认为您需要查看一些配置
如果您的应用程序不等待启动测试,则可以实现WaitTimes。
像这样创建一个类:
public class WaitTimes : IWaitTimes
{
public TimeSpan GestureWaitTimeout
{
get { return TimeSpan.FromMinutes(1); }
}
public TimeSpan WaitForTimeout
{
get { return TimeSpan.FromMinutes(1); }
}
}然后像这样实现它:
_app = ConfigureApp
.Android
.EnableLocalScreenshots()
.ApkFile(apkFile)
.DeviceSerial("###")
.ApiKey("###")
.Debug()
.WaitTimes(new WaitTimes())
.StartApp();否则,您可以只等待加载特定的元素,如下所示:
_app.WaitForElement(c => c.Marked("Login"), "Time out expired", TimeSpan.FromSeconds(15));
var result = _app.Query(c => c.Marked("Login"));
Assert.AreEqual(1,result.Length);
_app.Screenshot("Test passed with success");Here是一些关于WaitTime和WaitForElement的更多信息,可能对您有所帮助。
发布于 2016-04-07 06:32:24
会不会是模拟器太慢了,模拟器创建这些文件的时间超过了10秒?
是的,这可能就是问题所在。
你对如何解决这个问题有什么建议吗?
Xamarin.UITest nuget包的最新开发版本已将该超时间隔从10秒增加到60秒。
尝试使用Xamarin.UITest 1.3.6.1476-dev或更高版本。
发布于 2016-07-22 05:57:21
我解决了这个问题,将未签名的APK上传到我的测试设备上( Xamarin Android Player也是如此)。我必须在项目属性的安卓包签名选项中取消选中“对.APK文件签名”复选框。WaitTimes的方式对我不起作用。
https://stackoverflow.com/questions/36389383
复制相似问题