ajax jasmine protractor appium end-to-end

ajax - Se agotó el tiempo de espera esperando el resultado de la secuencia de comandos asincrónica mientras se ejecutan secuencias de comandos de transportador con appium



jasmine protractor (4)

Agregue parámetro a conf.js en capacidades:

maxSessions: 1,

Debería ayudar. Además, su intervalo de tiempo de espera puede ser demasiado alto. 30000 debería ser suficiente.

O al preparar la línea de cambio para:

browser.manage().timeouts().implicitlyWait(5000);

@EDIT: cambiar a algo similar a esto encontró algo como esto

  1. baseUrl es 10.0.2.2 en lugar de localhost porque se usa para acceder al localhost de la máquina host en el emulador / dispositivo Android

baseUrl: ''http://10.0.2.2:'' + (process.env.HTTP_PORT || ''8000''),

Capacidades nuevo comando:

newCommandTimeout: 60

También el uso de promesas podría ser útil en lugar de tiempos de espera

someethingToDo.click().then(function(){ return somethingToDo.click(); }).then(function(){ //morecode });

Tengo un problema al ejecutar más de una prueba en el transportador: Se agotó el tiempo de espera esperando el resultado del script asíncrono después de 60010 s El código del script tutorial que se ejecuta justo después del script de inicio de sesión:

¡Aquí el código que estoy usando en mi archivo de configuración de A Code propuesto en otra pregunta pero no resolvió mi problema!

onPrepare: function() { return browser.getProcessedConfig().then(function(config) { var browserName = config.capabilities.browserName; browser.manage().timeouts().setScriptTimeout(60000); });

PD: ¡Incluso si coloco una ubicación incorrecta para el elemento, tengo el error de tiempo de espera y no se puede encontrar este elemento! como si esa línea de código "el clic en el botón tutorial" nunca se ejecute

  • ¿Es porque el tutorial hace una llamada ajax?

Aquí mi código html:

</div></md-card-content> </md-card><!-- end ngIf: !expandChart --> </div> </div> </div></md-content> </div></div> <!-- Google Analytics: change UA-XXXXX-X to be your site''s ID --> <!--<script>--> <!--!function(A,n,g,u,l,a,r){A.GoogleAnalyticsObject=l,A[l]=A[l]||function(){--> <!--(A[l].q=A[l].q||[]).push(arguments)},A[l].l=+new Date,a=n.createElement(g),--> <!--r=n.getElementsByTagName(g)[0],a.src=u,r.parentNode.insertBefore(a,r)--> <!--}(window,document,''script'',''https://www.google-analytics.com/analytics.js'',''ga'');--> <!--ga(''create'', ''UA-XXXXX-X'');--> <!--ga(''send'', ''pageview'');--> <!--</script>--> <script src="scripts/vendor.js"></script> <script src="cordova.js"></script> <script src="scripts/scripts.js"></script> <script src="https://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/sha1.js"></script> <script src="https://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/sha256.js"></script> <script src="https://crypto-js.googlecode.com/svn/tags/3.1.2/build/components/enc-base64-min.js"></script> <div class="introjs-overlay" style="top: 0;bottom: 0; left: 0;right: 0;position: fixed;opacity: 0.8;"></div><div class="introjs-helperLayer " style="width: 538px; height:366px; top:64px;left: 195px;"></div><div class="introjs-tooltipReferenceLayer" style="width: 538px; height:366px; top:64px;left: 195px;"><div class="introjs-tooltip" style="left: 546px;"><div class="introjs-tooltiptext">Watchlist view. Swipe the row in the grid to the left to show the delete action.</div><div class="introjs-bullets"><ul><li><a class="active" href="javascript:void(0);" data-stepnumber="1">&nbsp;</a></li><li><a href="javascript:void(0);" data-stepnumber="2">&nbsp;</a></li><li><a href="javascript:void(0);" data-stepnumber="3">&nbsp;</a></li><li><a href="javascript:void(0);" data-stepnumber="4">&nbsp;</a></li><li><a href="javascript:void(0);" data-stepnumber="5">&nbsp;</a></li><li><a href="javascript:void(0);" data-stepnumber="6">&nbsp;</a></li><li><a href="javascript:void(0);" data-stepnumber="7">&nbsp;</a></li><li><a href="javascript:void(0);" data-stepnumber="8">&nbsp;</a></li></ul></div><div class="introjs-progress" style="display: none;"><div class="introjs-progressbar" style="width:12.5%;"></div></div><div class="introjs-arrow left" style="display: inherit;"></div><div class="introjs-tooltipbuttons"><a class="introjs-button introjs-skipbutton" href="javascript:void(0);">Don''t show it again!</a><a href="javascript:void(0);" class="introjs-button introjs-prevbutton introjs-disabled" tabindex="-1">Previous</a><a href="javascript:void(0);" class="introjs-button introjs-nextbutton">Next</a></div></div></div></body></html>​


Creo que podría tener un problema con la configuración de los tiempos de espera. Elimine todas las referencias de tiempo de espera de su archivo de configuración e intente algo como esto (ajuste en consecuencia para incluir otras configuraciones según sea necesario):

exports.config = { allScriptsTimeout: 60000, getPageTimeout: 30000, jasmineNodeOpts: { defaultTimeoutInterval: 62000, } }


Finalmente traté de resolver mi problema agregando esta llamada nuevamente

describe("long asynchronous specs", function() { beforeEach(function(done) { done(); }, 10000); });

Aquí hay un enlace de Jasmine Asynchronous_Support que me ayuda a comprender los problemas de tiempo de espera. Espero que pueda ayudarte


1. Con respecto a la verificación de ruta

En caso de que después de la primera especificación, el usuario inició sesión y la ruta cambió. Asegúrese de que todos se naveguen antes de ejecutar cualquier prueba.

expect(browser.getCurrentUrl()).toContain(''#/the_route_of_logged_in''); // ''#/'' is just illustration. You can remove it to make it shorter // => like this ...toContain(''the_route_of_logged_in'');

2. En cuanto a hacer clic en tutorial

browser.wait(EC.elementToBeClickable(tutorial), 10000);

Haga el browser.wait con EC para el botón de clic antes de intentar hacer clic en él (parece que tiene un buen enfoque aquí)

=> RESUMEN puedes probar esto:

''user strict''; var EC = protractor.ExpectedConditions; describe(''tutorials'', function () { it(''should make click into tutorial button'', function () { expect(browser.getCurrentUrl()).toContain(''the_route_of_logged_in''); var tutorial = $(''.introjs-nextbutton''); browser.wait(EC.elementToBeClickable(tutorial), 8000, ''Timed out''); tutorial.click(); browser.sleep(8080); // regardless we are not reaching this point. But I will suggest to reduce this sleep time like 1000 (1s). }); });

3. (opcional) en caso de que 2 puntos anteriores no ayuden

En todas sus especificaciones, login-spec.js y tutorial-spec.js . Añadir process.nextTick(done); en un bloque afterAll() para garantizar que no haya ningún Jasmine Reporters atascado después de una especificación.

describe(''foo'', function(){ afterAll(function(done){ process.nextTick(done); }); it(''should bar...'', function() {}); }

PD: Tenga en cuenta que no tengo ni idea de si mis sugerencias / enfoque podrían ayudar. Como la depuración con e2e-test siempre es dolorosa ... porque siempre es probable que no sepamos "de dónde vienen los errores". Entonces, todo lo que puedo hacer es darte sugerencias. (a veces me llevó horas observar los comportamientos del navegador para identificar un problema de e2e-test)

Y NO COPIE PASTA mi código en su código. Lo escribí con las imágenes que proporcionas, puedo hacer algunos errores tipográficos allí.