selenium - 如何在 Intern/Leadfoot(不是浏览器/客户端)中轮询条件?

标签 selenium intern

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

我使用pollUntil来检查URL客户端,但这会导致检测到页面卸载事件;脚本执行不能跨页面加载工作。 至少在 Safari 中是这样。我可以添加 sleep ,但我想知道是否有更好的方法。

问题:

  1. 如何对 this.remote.getCurrentUrl() 之类的内容进行轮询?基本上我想做一些类似于 this.remote.waitForCurrentUrlToEqual(...) 的事情,但我也很好奇如何轮询来自 Selenium 命令的任何内容与使用在远程浏览器中执行代码的 pollUntil 。

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

  3. 最佳实践:我是否需要向 Chai 做出断言,或者当我轮询并等待测试内容时是否有可能?例如,在本例中,我只是尝试进行轮询以确保我们在 30 秒内到达正确的 URL,并且我没有明确的断言。我只是假设测试会失败,但不会说明原因。如果最佳实践是在此处进行断言,那么我将在此处或在使用 wait 的任何时候执行此操作?

这是我的代码示例:

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

最佳答案

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 这样的东西时,没有必要(或没有地方)做出断言。但是,使用您自己的轮询功能,您可以让它拒绝其 promise 并出现信息错误。

关于selenium - 如何在 Intern/Leadfoot(不是浏览器/客户端)中轮询条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25126973/

相关文章:

javascript - 在测试 Web 应用程序时,我是否应该担心使用 selenium 发送纯文本密码

javascript - 与实习生一起测试异步页面更改

java - 通过maven命令设置config.properties值

css - selenium - 如何使用 NAME 和 VALUE 定位复选框

c# - Selenium webdriver 系统无效转换异常

javascript - Intern4 和 CDN 资源

selenium - 实习生 Leadfoot 有条件地运行命令

gulp - 实习测试框架是否有任何 gulp 插件或文档可以与 gulp 集成?

java - Selenium Java 打开新窗口,关闭它,并再次控制主窗口