我正在尝试创建一个简单的测试,点击我的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;”吗?我是否需要在下一页找到按钮元素?
此时我很高兴看到我的应用页面加载,所以我甚至可以在测试浏览器中看到该按钮。它关闭得这么快。这是我的第一个问题,所以如果它令人困惑,我道歉。谢谢。
答案 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
});
});

然后添加测试
希望有所帮助