在运行适用于Android的Xamarin UI测试时,等待ClearAppData2的结果超时

时间:2016-04-03 18:28:00

标签: c# android xamarin ui-testing xamarin-test-cloud

我已经使用Xamarin UITest框架为我的Xamarin应用程序创建了自动Android和iOS UI测试。在本地运行测试时,它们工作正常,但在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

Android测试正在使用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");

表示在十秒内无法找到生成的文件。可能是,模拟器太慢了,模拟器创建这些文件需要的时间超过十秒?

3 个答案:

答案 0 :(得分:1)

我认为您需要查看一些配置 如果您的应用不等待启动测试实施等待时间

for(i = 0; i < ncalist.length; i++){
	var depprtVar = ncalist[i]["depprt"];
    // here you can write code to check for duplication in your array and add the depprtVar to array if it is not in the array.

}

实施等待时间

_app = ConfigureApp.Android.EnableLocalScreenshots().ApkFile(apkFile).DeviceSerial("###").ApiKey("###").Debug().WaitTimes(new WaitTimes());  
                            .StartApp();

2或者如果您在页面中等待一些元素但是快速测试执行只需等待元素然后执行测试。

public class WaitTimes : IWaitTimes
{
    public TimeSpan GestureWaitTimeout
    {
        get { return TimeSpan.FromMinutes(1); }
    }
    public TimeSpan WaitForTimeout
    {
        get { return TimeSpan.FromMinutes(1); }
    }
}

请将此链接指向waitimes和waitelement,这对you

有帮助

答案 1 :(得分:1)

  

可能是,模拟器太慢了,模拟器创建这些文件的时间超过十秒?

是的,这可能是问题。

  

您对如何解决此问题有任何建议吗?

Xamarin.UITest nuget包的最新开发版本将超时间隔从10秒增加到60秒。

尝试with或更新。

答案 2 :(得分:1)

我解决了这个问题,将APK的未签名版本上传到我的测试设备(Xamarin Android Player也是如此)。我不得不取消选中&#34;签署.APK文件&#34;来自项目属性中的Android Package Signing选项的框。 WaitTimes 方式对我没用。