Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 量角器e2e测试登录重定向_Javascript_Angularjs_Oauth_Protractor_E2e Testing - Fatal编程技术网

Javascript 量角器e2e测试登录重定向

Javascript 量角器e2e测试登录重定向,javascript,angularjs,oauth,protractor,e2e-testing,Javascript,Angularjs,Oauth,Protractor,E2e Testing,目前有部分端到端测试,输入用户名/密码并单击“登录” 它成功地做到了这一点,但在“感谢您登录”页面结束,而不是像我通过浏览器登录那样重定向到“帐户门户”或“仪表板”\ 这个项目很新,但我们使用的是OAuth 主要问题:这听起来像是需要http模拟吗? 进一步详情: 规格js describe('login page', function() { browser.driver.get('http://url.path/login'); it('should render login

目前有部分端到端测试,输入用户名/密码并单击“登录”

它成功地做到了这一点,但在“感谢您登录”页面结束,而不是像我通过浏览器登录那样重定向到“帐户门户”或“仪表板”\

这个项目很新,但我们使用的是OAuth

主要问题:这听起来像是需要http模拟吗?

进一步详情:

规格js

describe('login page', function() {
    browser.driver.get('http://url.path/login');
    it('should render login page', function() {

      // Checking the current url
      var currentUrl = browser.driver.getCurrentUrl();
      expect(currentUrl).toMatch('/login');
    });
    it('should sign in', function() {

      // Find page elements
      var userNameField = browser.driver.findElement(By.id('username'));
      var userPassField = browser.driver.findElement(By.id('password'));
      var userLoginBtn  = browser.driver.findElement(By.id('loginbtn'));

      // Fill input fields
      userNameField.sendKeys('test@user.com');
      userPassField.sendKeys('1234');

      // Ensure fields contain what we've entered
      expect(userNameField.getAttribute('value')).toEqual('test@user.com');
      expect(userPassField.getAttribute('value')).toEqual('1234');

      // Click to sign in - waiting for Angular as it is manually bootstrapped.
      userLoginBtn.click().then(function() {
        browser.waitForAngular();
        expect(browser.driver.getCurrentUrl()).toMatch('/success');
      }, 10000);
    });
});
如果我快速点击测试窗口,我可以看到它成功进入“成功”页面,但它不会重定向到仪表板(当您通过浏览器手动登录时,它会重定向)。如何继续此测试以保持登录状态并像用户一样访问仪表板

//新的项目,角度和量角器

编辑-稍微总结一下:

  • 我想让量角器在/login页面上开始测试
  • 量角器应该找到并填写用户名和密码字段,然后单击登录
  • 量角器成功登录,查看a/thankyou页面,然后立即重定向到用户/仪表板页面
  • 也许我遗漏了一个步骤,我们需要在量角器测试中手动重定向吗

(当用户通过浏览器手动登录时,他们看不到/Thankyu页面-这是一个快速重定向到/dashboard的页面。量角器无法到达dashboard页面。

您的帖子缺少信息,但我将尝试做一个假设:

我怀疑您的“谢谢您登录”页面会在超时后使javascript重定向

因此,在您单击“登录”后,浏览器将加载“谢谢您登录”页面,并且由于
.then()
的第二个参数不起任何作用,
browser.waitForAngular()
会失败,因为该页面上没有角度


您应该尝试使用类似于
browser.driver.wait()
的东西,并在浏览器进入
/success
页面后,在合理的超时时间内检测url更改(此处描述:)并触发
browser.waitForAngular()

您尝试过使用显式等待吗

    return browser.driver.wait(function() {
        return browser.driver.getCurrentUrl().then(function(url) {
            return /success/.test(url);
        });
    }, 10000);
您的代码如下所示:

  // Click to sign in - waiting for Angular as it is manually bootstrapped.
  userLoginBtn.click();
  return browser.driver.wait(function() {
        return browser.driver.getCurrentUrl().then(function(url) {
            return /success/.test(url);
        });
  }, 10000);

当我从您链接的页面上的解决方案运行代码时,量角器显示:“失败:未定义不是函数”。看起来在“compareCurrentUrl”函数中失败了。在这里可以找到我如何使用该函数的示例,这很有帮助,但返回行应更改为:返回url==[所需url];