你如何在Intern / Leadfoot(不是浏览器/客户端)中查询某个条件?

时间:2014-08-04 20:25:55

标签: selenium intern

我正在尝试验证帐户是否已成功创建,但在点击提交按钮后,我需要等到下一页已加载并验证用户是否以正确的URL结束。

我使用pollUntil检查网址客户端,但至少在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秒内找到了正确的网址,而且我没有明确的断言。我只是假设测试会失败,但它不会说出原因。如果最佳做法是在此处作出断言,我将如何在此处或在我使用等待的任何时间进行断言?

  4. 以下是我的代码示例:

    '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));
    }
    

1 个答案:

答案 0 :(得分:2)

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之类的东西时,没有必要(或地方)做出断言。但是,使用您自己的轮询功能,您可以通过信息性错误拒绝其承诺。