【发布时间】:2015-11-03 19:36:50
【问题描述】:
所以今天我一直致力于使用 Protractor 为 Angular JS 应用程序设置端到端测试。为了编写更简洁的测试,我使用了 Protractor 网站上描述的 Page Object 模式。
测试场景:用户进入网站后,需要先登录。通过填写他们的凭据并单击按钮,用户将被重定向到验证页面。他们需要在此处输入已通过电子邮件发送给他们的代码。在这种情况下,运行 end-2-end 测试时验证代码始终相同 (123456)。当用户输入他/她的代码后,需要单击验证按钮才能进入登录页面(organisations)。将向用户显示组织列表。
量角器测试:
'use strict';
describe('when selecting organisation', function () {
var page;
var util = require('../../util');
browser.get('/#/login');
// login before each test case
beforeEach(function () {
page = require('./organisations.po');
util.login('username', 'password');
});
// logout after each one
afterEach(function () {
page.logoutButton.click();
});
it('should have a list of organisations', function () {
expect(browser.getCurrentUrl()).toEqual('http://localhost:9111/#/organisations');
expect(page.organisationList.isPresent()).toBe(true);
});
});
organisations.po.js (the page object)
'use strict';
var MainPage = function () {
// organisations
this.organisationList = element(by.css('.select-list'));
this.logoutButton = element(by.css('.logout-button'));
};
module.exports = new MainPage();
util.js (code for login process)
'use strict';
var Util = function () {
this.login = function login(username, password) {
browser.get('/#/login');
var loginPage = require('./spec/login/login.po');
var validationPage = require('./spec/login/validate.po');
// fill in login form
loginPage.username.sendKeys(username);
loginPage.password.sendKeys(password);
// submit login form and navigate to validation page
loginPage.loginButton.click();
// fill in validation form
validationPage.validationCode.sendKeys('123456');
// submit validation form and navigate to landing page
validationPage.submitValidateBtn.click();
}
};
module.exports = new Util();
运行测试时会发生什么: Protractor 能够填写用户凭据并单击登录按钮。但是,不会发生到验证页面的相应重定向,导致预期失败,因为 Protractor 无法定位页面对象,因为这些对象位于另一个页面上。 Here 是 Protractor 产生的错误消息的一部分。以防万一,here 你能看到正在使用的 Protractor 配置文件吗?
我尝试在按钮点击周围放置明确的等待(browser.wait(<condition>),但这似乎具有相同的效果。有人能指出我做错了什么以及为什么没有发生重定向吗?我在这里遗漏了一些明显的东西吗? ? 提前致谢!
【问题讨论】:
-
您是否手动运行规范,全部由您自己完成?那它成功了吗?
-
运行应用程序时(使用 end-2-end 配置),一切正常。我只需登录、验证并进入登录页面。
-
发生了什么而不是重定向到验证页面?浏览器控制台上的任何错误?谢谢。
-
另外,如果在单击登录按钮后,您会等到验证文本输入变得可见怎么办:
browser.wait(protractor.ExpectedConditions.visibilityOf(validationPage.validationCode), 5000)?.. -
当您点击登录按钮时,您的应用程序中是否发送了任何 XHR 请求?此请求是否在测试中成功?
标签: angularjs protractor pageobjects e2e-testing