我正在使用Intern js
处理UI自动化项目。我正在使用page object model
实现它。我有一个简单的场景,用户在登录页面中输入凭据并导航到欢迎页面。
在我的剧本中,我有一个' doLogin()' LoginPage
中的函数,负责输入凭据并单击“提交”按钮。
现在问题是我希望doLogin()
返回WelcomePage
并且我无法找到执行此操作的方法。
继承我的代码setUp:
LoginPage.js
define([],
function () {
function LoginPage(remote) {
this.remote = remote;
}
LoginPage.prototype = {
constructor: LoginPage,
// Login Page related Methods
doLogin: function(username,password){
this
.findById(json.locators.username).
.type(username).end()
.findById(json.locators.password)
.type(username).end()
.findByXpath(json.locators.sumit).click().end()
.sleep(1000).then(function(){
return welcomePage// this is not working
})
}
};
return LoginPage;
});
WelcomePage.js
define([],
function () {
function WelcomePage(remote) {
this.remote = remote;
}
WelcomePage.prototype = {
constructor: WelcomePage,
doSomething: function(){
//welcome page related method
}
};
return WelcomePage;
});
现在我真正希望实现的目标是:
loginpage.doLogin(usrname,password).doSomething();
有人可以帮忙吗?
答案 0 :(得分:1)
实现页面对象的一种更灵活的方法是使它们成为辅助函数组(如Leadfoot的pollUntil
)而不是类似Command的对象。
使用该模型,您的LoginPage对象可能如下所示:
define([], function () {
return {
doLogin: function (username, password) {
return function () {
return this.parent
.findById(json.locators.username).
.type(username).end()
.findById(json.locators.password)
.type(username).end()
.findByXpath(json.locators.sumit).click().end()
.sleep(1000).then(function(){
return welcomePage// this is not working
});
}
}
};
});
WelcomePage可能看起来像
define([], function () {
return {
doSomething: function () {
return function () {
return this.parent
// more stuff
}
}
};
});
您可以在返回的函数中调用this.parent
,因为当调用辅助函数时(作为Command then
回调),它的上下文将被设置为调用它的Command。
你会像
一样使用它们define([
'./WelcomePage',
'./LoginPage',
// ...
], function (
welcomePage,
loginPage,
// ...
) {
// ...
this.remote
.get('some page')
.then(loginPage.doLogin('username', 'password'))
.then(welcomePage.doSomething())
// other stuff
// ...
});