I created automatic Android and iOS UI-Tests for my Xamarin application with the Xamarin UITest base. When running tests locally, they work fine, but when they run on bitrate CI, iOS tests work fine, but tests on Android UI don't work with the following exception:
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 test works with version Xamarin.UITest version 1.3.5. This is important because it seems to be a bug before version 1.3.3 . I also tried to ignore failed tests, but then the test runner fails with other Android tests. Interestingly, separate tests sometimes pass.
Has anyone encountered this behavior before? Do you have any recommendations on how to fix this?
When decompiling CommandAdbClearAppData (which throws an exception), I see
// 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");
which indicates that the generated file cannot be found within ten seconds. Maybe the emulator is just too slow, and the emulator takes more than ten seconds to create these files?