Selenium 您如何在实习生/领导层(而非浏览器/客户端)中调查条件?

Selenium 您如何在实习生/领导层(而非浏览器/客户端)中调查条件?,selenium,intern,Selenium,Intern,我正在尝试验证是否成功创建了帐户,但在单击“提交”按钮后,我需要等待下一个页面加载完毕,并验证用户的URL是否正确 我正在使用pollUntil检查URL客户端,但这会导致检测到页面卸载事件;脚本执行无法跨页面加载。至少在Safari中是这样。我可以增加睡眠,但我想知道是否有更好的方法 问题: 如何对类似this.remote.getCurrentUrl()之类的内容进行轮询?基本上,我想做一些类似于this.remote.waitForCurrentUrlToEqual(…)的事情,但我也很好

我正在尝试验证是否成功创建了帐户,但在单击“提交”按钮后,我需要等待下一个页面加载完毕,并验证用户的URL是否正确

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

问题:

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

  • 我正在检查用户在登录此处后是否在受保护的URL处结束。除了投票,还有更好的方法来检查这一点吗

  • 最佳实践:我是否需要与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的一种方法是编写一个轮询器,作为功能测试的一部分运行,类似(未测试):

    当您使用类似于PollTill的东西时,不需要(或在任何地方)做出断言。然而,使用您自己的轮询函数,您可以让它以一个信息错误拒绝它的承诺

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