Me gustaría hacer que la Prueba espere hasta que la página se haya cargado correctamente antes de continuar con el siguiente paso. Solía esperar hasta pero,

var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(time));
var elements = wait.Until(x => x.FindElements(by));

Estoy enfrentando el problema de que el elemento esté presente cuando los datos aún no se han cargado completamente, lo que hace que la prueba falle. No quiero usar el Thread.Sleep (tiempo); ya que no es un muy buen enfoque para este problema.

¿Hay alguna opción como la proporcionada por jQuery como "jQuery.active"

Estoy usando C # con webdriver 3 para escribir esa prueba. Me gustaría hacer la prueba para esperar a que la página se complete la carga y todas las llamadas HTTP se realicen antes de continuar con el siguiente paso. ¿Hay alguna forma de hacerlo? Gracias de antemano

1
Anand S 22 mar. 2017 a las 15:01

2 respuestas

La mejor respuesta

El seguimiento de las llamadas HTTP se puede hacer usando el siguiente código

var javaScriptExecutor = Browser.Driver as IJavaScriptExecutor;
            Browser.Driver.Manage().Timeouts().AsynchronousJavaScript = TimeSpan.FromSeconds(5);
            return javaScriptExecutor?.ExecuteAsyncScript("var cb = arguments[arguments.length - 1];" +
                                                      "if (window.webpackJsonp && document.querySelector('[aurelia-app]')) { cb('Aurelia composed') }" +
                                                      "document.addEventListener('aurelia-http-client-requests-drained', function (e) {" +
                                                      "  cb('aurelia-http-client-requests-drained')" +
                                                      "}, false);");

El código anterior usa el evento aurelia-http-client-requests-drained que se activa cuando se ha drenado toda la solicitud HTTP Para saber si la página está compuesta, se puede usar el siguiente código

var javaScriptExecutor = Browser.Driver as IJavaScriptExecutor;
            Browser.Driver.Manage().Timeouts().AsynchronousJavaScript = TimeSpan.FromSeconds(5);
            return javaScriptExecutor?.ExecuteAsyncScript("var cb = arguments[arguments.length - 1];" +
                                                      "if (window.webpackJsonp && document.querySelector('[aurelia-app]')) { cb('Aurelia composed') }" +
                                                      "document.addEventListener('aurelia-composed', function (e) {" +
                                                      "  cb('Aurelia App composed')" +
                                                      "}, false);");

Esto aprovecha las aurelia-composed

0
Anand S 5 may. 2017 a las 11:18

Encuentre un elemento en la parte dinámica de la página y espere. Hago esto todo el tiempo y funciona bien.

0
JeffC 22 mar. 2017 a las 13:44