我想在我的 Angular 应用程序的两个单独页面上运行 Protractor 测试:/dashboard
和 /articles
。
复杂的是我必须手动登录应用程序。
目前我有这个设置:
var LoginPage = function() {
ptor = protractor.getInstance();
this.login = function(url) {
ptor.get(url);
ptor.findElement(protractor.By.model('email')).sendKeys(config.LOGIN_EMAIL);
ptor.findElement(protractor.By.model('password')).sendKeys(config.LOGIN_PASS);
ptor.findElement(protractor.By.tagName('button')).click();
};
};
describe('The dashboard', function() {
console.log('logging in');
var loginPage = new LoginPage();
loginPage.login(config.DASHBOARD_URL);
console.log('logged in');
it('has a heading', function() {
console.log('testing dashboard 1');
heading = ptor.findElement(protractor.By.tagName('h1'));
expect(heading.getText()).toEqual(config.DASHBOARD_HEADING);
});
});
describe('The article widget', function() {
console.log('logging in');
var loginPage = new LoginPage();
loginPage.login(config.ARTICLE_URL);
console.log('logged in');
it('has a heading', function() {
console.log('testing article 1');
heading = ptor.findElement(protractor.By.tagName('h1'));
expect(heading.getText()).toEqual(config.ARTICLES_HEADING);
});
});
这给了我以下输出:
Selenium standalone server started at http://192.168.2.9:56791/wd/hub
logging in
LoginPage
logged in
logging in
LoginPage
logged in
testing dashboard 1
Ftesting article 1
看起来这两个 describe
部分是同时开始的。我如何才能强制执行以下事件序列,同时仍以合理的方式构建代码?
- 加载仪表板页面
- 登录
- 运行仪表板测试
- 加载文章页面(假设我们已经登录)
- 运行文章测试
最佳答案
您可以将登录名移动到另一个文件。
然后,在您的 Protractor 配置文件中执行此操作:
exports.config = {
specs: [
'spec/login.js',
'spec/dashboard_test.js',
'spec/article_test.js'
],
...
};
登录将在其他测试之前运行
关于javascript - Protractor 和 Angular : How to test two pages in an app, 一个接一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20199563/