ClearAppData2 result waiting time for running Xamarin UI tests for Android

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?

+6
source share
3 answers

Maybe the emulator is just too slow, and the emulator takes more than ten seconds to create these files?

Yes, that can be a problem.

Do you have any recommendations on how to fix this?

The latest versions of the developer of the Xamarin.UITest nuget package have increased the timeout interval from 10 seconds to 60 seconds.

Try Xamarin.UITest 1.3.6.1476-dev or later.

+1
source

I think you need to look at some settings. If your application does not wait for the Run Timeout test to run.

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

Implementation for timeout

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

2 Or if you wait for some item on the page, but quickly test the exploit, just wait for the item and then run the test.

 _app.WaitForElement(c => c.Marked("Login"), "Time out completed", TimeSpan.FromSeconds(15)); var result = _app.Query(c => c.Marked("Login")); Assert.AreEqual(1,result.Length); _app.Screenshot("Test passed with sucess"); 

Follow this link to standby and waitelement, this will help you

0
source

I solved this problem by downloading an unsigned version of the APK on my test device (the same for Xamarin Android Player). I needed to uncheck the "Sign the .APK file" option from the "Download Android Package" option in the project properties. The WaitTimes method did not work for me.

0
source

All Articles