【问题标题】:How do you poll for a condition in Intern / Leadfoot (not browser / client side)?您如何轮询 Intern / Leadfoot(不是浏览器/客户端)中的条件?
【发布时间】:2014-08-04 20:25:54
【问题描述】:

我正在尝试验证帐户是否已成功创建,但在单击提交按钮后,我需要等到下一页已加载并验证用户最终访问了正确的 URL。

我使用pollUntil 来检查URL 客户端,但这至少在Safari 中会导致Detected a page unload event; script execution does not work across page loads.。我可以添加一个睡眠,但我想知道是否有更好的方法。

问题:

  1. 您如何对this.remote.getCurrentUrl() 之类的内容进行投票?基本上我想做this.remote.waitForCurrentUrlToEqual(...)之类的事情,但我也很好奇如何从 Selenium 命令中轮询任何东西,而不是使用在远程浏览器中执行代码的 pollUntil。

  2. 我正在检查用户在此处登录后是否最终到达受保护的 URL。除了轮询之外,还有更好的方法来检查吗?

  3. 最佳实践:我是否需要对 Chai 进行断言,或者当我轮询并等待某些东西作为我的测试时是否有可能?例如,在这种情况下,我只是尝试轮询以确保我们在 30 秒内到达正确的 URL,并且我没有明确的断言。我只是假设测试会失败,但它不会说明原因。如果最佳做法是在这里进行断言,我将如何在这里或任何时候使用等待?

这是我的代码示例:

'create new account': function() {
  return this.remote
    // Hidden: populate all account details
    .findByClassName('nextButton')
      .click()
      .end()
    .then(pollUntil('return location.pathname === "/protected-page" ? true : null', [], 30000));
}

【问题讨论】:

    标签: selenium intern


    【解决方案1】:

    pollUntil 帮助程序通过在浏览器中运行异步脚本来检查条件,因此它不会在页面加载时工作(因为脚本在页面加载时会消失)。轮询当前远程 URL 的一种方法是编写一个轮询器,该轮询器将作为功能测试的一部分运行,例如(未经测试):

    function pollUrl(remote, targetUrl, timeout) {
        return function () {
            var dfd = new Deferred();
            var endTime = Number(new Date()) + timeout;
    
            (function poll() {
                remote.getCurrentUrl().then(function (url) {
                    if (url === targetUrl) {
                        dfd.resolve();
                    }
                    else if (Number(new Date()) < endTime) {
                        setTimeout(poll, 500);
                    }
                    else {
                        var error = new Error('timed out; final url is ' + url);
                        dfd.reject(error);
                    }
                });
            })();
    
            return dfd.promise;
        }
    }
    

    你可以这样称呼它:

    .then(pollUrl(this.remote, '/protected-page', 30000))
    

    当您使用 pollUntil 之类的东西时,没有必要(或地方)做出断言。但是,使用您自己的轮询函数,您可以让它拒绝它的承诺,并显示信息错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-03
      • 1970-01-01
      • 2021-04-23
      • 1970-01-01
      相关资源
      最近更新 更多