Selenium和Aurelia,如何让测试等待页面加载和HTTP调用完成

时间:2017-03-22 12:01:23

标签: c# selenium webdriver aurelia

我想让测试等到页面正确加载后再继续下一步。我用了等到,但是,

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

当数据尚未完全加载时,我面临元素存在的问题。这使得测试失败。我不想使用Thread.Sleep(时间);因为这不是解决这个问题的好方法。

是否有类似jQuery提供的选项,如“jQuery.active”

我正在使用C#和webdriver 3来编写该测试。我想进行测试以等待页面完成加载,并且在继续下一步之前完成所有HTTP调用是否有任何方法可以做到这一点?提前谢谢

2 个答案:

答案 0 :(得分:0)

在页面的动态部分中查找元素并等待它。我一直都这样做,效果很好。

答案 1 :(得分:0)

可以使用以下代码

跟踪HTTP调用
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);");

上面的代码使用事件aurelia-http-client-requests-drained,该事件在所有HTTP请求耗尽时触发 要知道页面是否合成,可以使用以下代码

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

这利用了aurelia-composed