检查预期 URL 并显示实际 URL

Check expected URL and display the actual URL

在功能测试中,我尝试编写一个 "Then" 步骤来检查当前 URL。

在查看 SO 之后,似乎正确的方法是 "wait" url 成为预期的:

Then('The URL contains {string}', function(url, callback) {
  browser.wait(EC.urlContains(url), 5000)
    .then(() => callback())
});

问题是,如果条件错误,我不知道实际是什么URL,这对调试很有帮助。

我尝试执行以下操作:

Then('The URL contains {string}', function(url, callback) {
  browser.wait(EC.urlContains(url), 5000)
    .then(() => callback())
    .catch(() => { throw Error('URL was ' + location.href); });
});

但我得到一个错误,因为 locationundefined

我还尝试了以下方法:

Then('The URL contains {string}', function(url, callback) {
  browser.wait(EC.urlContains(url), 5000)
    .then(() => callback())
    .catch(() => { throw Error('URL was ' + browser.executeScript('location.href')); });
});

但我只能看到:

Error: URL was ManagedPromise::19695 {[[PromiseStatus]]: "pending"}

因为browser.executeScript只有returns一个Promise.

在错误消息中显示实际 URL 的正确方法是什么?

我终于找到了:

Then('The URL contains {string}', function (url, callback) {
  browser.wait(EC.urlContains(url), 5000)
    .then(() => callback())
    .catch(() => {
      browser.getCurrentUrl().then((url) => { throw Error('URL was ' + url); });
    });
});