我在传统应用中添加了一个全新的,有角度的客户端层。登录后,旧版重定向到“家”。网址。该网址包含一个会话ID,我需要抓取并使用(在网址中)任何后续的获取/帖子。登录后我致电:
browser.getCurrentUrl()
然后使用正则表达式提取会话ID。我将会话ID存储起来并将其用于以后的获取/发布。
问题是虽然browser.getCurrentUrl()返回一个promise,我的所有测试都运行后才能获得会话ID。如何让量角器等待browser.getCurrentUrl()来解析。
特别是在我有代码的地方:
var sessionId = loginPage.login('testuser@example.com', 'testuser');
homePage = new HomePage(sessionId);
我真的需要在loginPage.login()上阻止所有代码,所以我会定义一个会话ID。我的主页测试和任何其他页面测试都需要会话ID才能正常运行。
如何在量角器中实现这一目标?
谢谢!
我的代码的相关部分看起来像这样......
home.spec.js:
describe('home page tests', function() {
var loginPage = new LoginPage();
var homePage;
// get sessionId from login and create a new HomePage object from it
beforeEach(function() {
var sessionId = loginPage.login('testuser@example.com', 'testuser');
homePage = new HomePage(sessionId);
homePage.get();
});
describe('main elements of home page test', function() {
it('page has correct username as part of user menu', function() {
expect(homePage.getUsername()).toEqual('testuser@example.com');
});
});
});
login.po.js:
function LoginPage {
// ...snip...
this.login = function(username, password) {
return this.get()
.then(function() {
this.username.sendKeys(username);
this.password.sendKeys(password);
this.loginButton.click();
})
.then(function() {
return browser.getCurrentUrl().then(function(url) {
var groups = sessionIdRegex.exec(url);
// return the extracted session id or null if there is none
if (groups !== null) {
return sessionIdRegex.exec(url)[2];
} else {
return null;
}
});
});
};
}
home.po.js:
function HomePage(sessionId) {
this.username = element(by.binding('username'));
this.getUsername = function() {
return this.username.getText();
}
this.get = function() {
return browser.get(browser.baseUrl + sessionId + '#/home');
};
};
module.exports = HomePage;
答案 0 :(得分:1)
最简单的方法是使用expect
:
茉莉花的期望也适应了解承诺。这就是行
的原因`expect(name.getText())。toEqual(' Jane Doe');
工作 - 这段代码实际上向控制流添加了一个期望任务,该任务将在其他任务之后运行。
login.po.js:
function LoginPage {
this.login = function(username, password) {
return this.get()
.then(function() {
this.username.sendKeys(username);
this.password.sendKeys(password);
this.loginButton.click();
})
.then(function() {
return browser.getCurrentUrl().then(function(url) {
var groups = sessionIdRegex.exec(url);
// return the extracted session id or null if there is none
if (groups !== null) {
return sessionIdRegex.exec(url)[2];
} else {
return null;
}
});
});
};
expect(this.login).not.toBeUndefined();
}