登录非Angular页面后无法访问Angular应用程序

时间:2017-05-29 20:24:24

标签: javascript angular protractor

我正在尝试创建一个简单的测试,点击我的Angular应用程序中的按钮。但是,当我导航到我的Angular应用程序时,它首先将我重定向到非Angular登录页面。

因此,用户的体验如下:用户导航到https://test.contracts365.com,然后重定向到登录页面,输入用户名和密码,然后单击“提交”按钮。然后加载应用页面,其中包含一个可以单击的按钮。

我已经让我的代码正常工作,当我运行量角器时,我看到一个镀铬窗口打开,我看到登录页面出现,我可以看到文本填入“用户名”和“密码”字段。然而,在此之后Chrome浏览器关闭。我没有看到我的应用页面加载包含我想要点击的按钮。

我用来尝试登录的代码如下(注意:用户名和密码文本被更改为假的,所以我可以发布我的问题)

describe('Go to Test site', function() {
  it('and login', function() {
    browser.get('https://test.contracts365.com');
    browser.ignoreSynchronization=true;
     element(by.name('login')).sendKeys('username');
     element(by.id('cred_password_inputtext')).sendKeys('password');
     element(by.id('cred_sign_in_button')).click();
     //browser.ignoreSynchronization=false;
  });
});

下一步是什么?我应该使用“browser.ignoreSynchronization = false;”吗?我是否需要在下一页找到按钮元素?

此时我很高兴看到我的应用页面加载,所以我甚至可以在测试浏览器中看到该按钮。它关闭得这么快。这是我的第一个问题,所以如果它令人困惑,我道歉。谢谢。

2 个答案:

答案 0 :(得分:0)

您的浏览器关闭,因为测试执行已完成。因此,下一步是在下一个加载的页面上找到一个按钮或其他元素。

我建议browser.wait(...)方法与What is __main__.py?一起使用,等待下一页完全加载并且您的元素可以互动。

我希望这能解决您的问题,否则请告诉我,我提供另一种解决方案; - )

答案 1 :(得分:0)

如@Batajus所述,您没有任何代码,因此测试执行已经完成。

如果您只需要登录一次就可以将代码放在beforeAll()中,甚至为它创建一个包含所有登录逻辑的方法,就像这样



function logon(username, password) {
  var EC = protractor.ExpectedConditions;

  browser.get('https://test.contracts365.com');
  browser.ignoreSynchronization = true;

  // Wait for the url to be changed to the logon page
  browser.wait(EC.urlContains('login.microsoftonline.com'), 5000);

  // Do the logon magic
  element(by.name('login')).sendKeys(username);
  element(by.id('cred_password_inputtext')).sendKeys(password);
  element(by.id('cred_sign_in_button')).click();
  browser.ignoreSynchronization = false;

  // Wait till you are back on the page
  browser.wait(EC.urlContains('test.contracts365.com'), 5000);
}

describe('Go to Test site', function() {
  beforeAll(function() {
    logon('john@doe.com', 'Welcome123')
  });

  it('should do some tests', function() {
    // do some tests
  });
});




然后添加测试

希望有所帮助