Protractor - 听用户导航

Protractor - Listen to user navigation

我目前正在使用 Protractor 测试 Angular 2+ 项目的端到端功能。

当用户必须使用外部提供商登录时,我的问题就出现了。在 APP 中有一个按钮可以将用户重定向到外部登录,如果用户成功登录,提供商 returns 用户使用令牌访问 APP,angular 处理会话。

示例:

  1. http://example.com 中的用户点击了 "Log in" 按钮。
  2. 应用程序将用户重定向到 http://authproviderexample.com/login
  3. 用户必须使用用户名和密码登录。
  4. 如果正确,身份验证提供程序将用户重定向到具有会话令牌的 APP http://example.com/login?token=ABCDEFG123456789
  5. 应用程序处理令牌以便用户登录。

我想跳过该外部登录并 "mock" 它以便我可以检查我的应用程序是否重定向到外部并正确处理令牌。这样我的 App 测试就独立于外部登录提供商。

我想以某种方式拦截导航,以便我可以告诉 Angular:如果用户被重定向到“http://authproviderexample.com/login”而不是将他重定向到“http://example.com/login?token=ABCDEFG123456789”。我将存储一个永久令牌,这样我就可以在不依赖外部服务的情况下登录。

你为什么不做一些像这样简单的事情

async function login(username, password) {
    await loginButton.click();
    if (await browser.getCurrentUrl() === "http://authproviderexample.com/login") {
        await browser.get("http://example.com/login?token=ABCDEFG123456789")
        return 
    } else {
        // else logic
    }
}