【问题标题】:Selenium and Aurelia, how make test wait for the page to load and HTTP calls to completeSelenium 和 Aurelia,如何让测试等待页面加载和 HTTP 调用完成
【发布时间】:2017-03-22 12:01:23
【问题描述】:

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

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

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

有没有像jQuery提供的“jQuery.active”这样的选项

我正在使用带有 webdriver 3 的 C# 来编写该测试。我想让测试等待页面完成加载并完成所有 HTTP 调用,然后再继续下一步,有什么方法可以做到这一点吗?提前谢谢你

【问题讨论】:

    标签: c# selenium webdriver aurelia


    【解决方案1】:

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

    【讨论】:

    • 我试过了,但并不总是成功。因此,如果可以知道页面的当前状态,它将使其更加稳定和更容易自动化
    • 您可以发布指向该页面或类似页面的链接吗?您可能需要在动态部分尝试不同的元素,直到找到合适的元素。
    • 抱歉,我找不到任何代表我的问题的示例页面,现在我找到了一个事件“aurelia-composed”,我可以使用它来查找页面是否准备好。我正在使用您所说的内容,并结合事件产生了很大的不同。知道是否有任何 HTTP 正在运行的能力会很棒。这将使整个过程更加容易和可靠。我仍在努力寻找实现这一目标的方法
    【解决方案2】:

    可以使用以下代码跟踪 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-14
      • 2015-08-31
      • 1970-01-01
      相关资源
      最近更新 更多