2016-04-03 16 views
6

Ho creato test automatici UI Android e iOS per la mia applicazione Xamarin con il framework Xamarin UITest. Durante l'esecuzione dei test a livello locale, che funzionano bene, ma quando li in esecuzione sul Bitrise CI, i test iOS funzionano bene, ma i test dell'interfaccia utente Android tenere in mancanza con la seguente eccezione:Timeout in attesa del risultato di ClearAppData2 durante l'esecuzione dei test dell'interfaccia utente Xamarin per Android

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 

prova Android sono in esecuzione con Xamarin .Ultima versione 1.3.5. Questo è importante, poiché sembra esserci stato un bug until version 1.3.3. Ho anche provato a ignorare i test falliti, ma poi il test-runner fallisce con altri test di Android. È interessante notare che a volte passano singoli test.

Qualcuno ha riscontrato questo comportamento prima? Hai qualche consiglio su come risolvere questo problema?

Quando decompilazione CommandAdbClearAppData (che genera l'eccezione), vedo

// 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"); 

che indica che il file generato non è stato trovato entro dieci secondi. Potrebbe essere, che l'emulatore è semplicemente troppo lento e l'emulatore impiega più di dieci secondi per creare quei file?

+0

Quando si eseguono questi test localmente, li si esegue anche su un emulatore? Gli emulatori sono decisamente un po 'più lenti di un dispositivo collegato. Ti consigliamo di provare a modificare la configurazione di "WaitTimes' a un tempo di attesa più lungo: https://developer.xamarin.com/api/member/Xamarin.UITest.Configuration.AndroidAppConfigurator.WaitTimes/p/Xamarin.UITest.Utils.IWaitTimes/ –

+0

Sono sempre in esecuzione i test su un emulatore, ma con gli emulatori che funzionano con le immagini x86 (quindi sono in realtà quasi più veloci dei dispositivi reali). E ho già WaitTimes configurato per sei minuti. –

risposta

0

penso youe bisogno di guardare ad un certo Configuation Se l'applicazione non in attesa di lanciare test di implementare i tempi di attesa

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

L'implementazione per i tempi di attesa

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

2 o se attendi qualche elemento nella pagina ma prova la massima rapidità, aspetta solo l'elemento e poi esegui il 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"); 

consultare questo link per waitimes e waitelement questo sarebbe utile per you

+0

Ho già implementato i tempi di attesa per attendere sei minuti e configurato per utilizzarli. Il problema sembra essere il timeout in "CommandAdbClearAppData", vero? –

1

Potrebbe essere, che l'emulatore è semplicemente troppo lento e l'emulatore richiede più di dieci secondi per creare quei file?

Sì, questo potrebbe essere il problema.

Avete qualche consiglio su come risolvere questo problema?

Le ultime versioni di sviluppo del pacchetto nuget Xamarin.UITest hanno aumentato tale intervallo di timeout da 10 secondi a 60 secondi.

Prova Xamarin.UITest 1.3.6.1476-dev o più recente.

+0

Aggiornato alla versione più recente (1.3.7-1478-dev) e tutto in mezzo - non ho fortuna con i miei test Android finora. In questo momento scadono dopo 30 minuti (CI lo uccide). A livello locale su Mac e Windows funzionano bene. –

0

Ho risolto questo problema caricando una versione non firmata dell'APK sul mio dispositivo di test (stessa cosa per Xamarin Android Player). Ho dovuto deselezionare la casella "Firma il file .APK" dall'opzione Firma pacchetto Android nelle proprietà del progetto. Il modo WaitTimes non ha funzionato per me.

Problemi correlati