实习生js:如何从打开它的函数中return页面的PageObject?
Intern js :How to return PageObject of the page from the function which opens it ?
我正在使用 Intern js
进行 UI 自动化项目。我正在使用 page object model
来实现它。我有一个简单的场景,用户在登录页面中输入凭据并导航到欢迎页面。
在我的脚本中,我在 LoginPage
中有一个 'doLogin()' 函数,它负责输入凭据并单击提交按钮。
现在的问题是我想要 doLogin()
到 return WelcomePage
而我无法弄清楚如何做到这一点。
这是我的代码设置:
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();
有人可以帮忙吗??
实现页面对象的一种更灵活的方法是使它们成为辅助函数组(如 Leadfoot 的 pollUntil
)而不是类似命令的对象。
使用该模型,您的 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
});
}
}
};
});
欢迎页面可能看起来像
define([], function () {
return {
doSomething: function () {
return function () {
return this.parent
// more stuff
}
}
};
});
您可以在返回的函数中调用 this.parent
,因为当辅助函数被调用时(作为命令 then
回调),它的上下文将设置为调用它的命令。
你会像
一样使用它们
define([
'./WelcomePage',
'./LoginPage',
// ...
], function (
welcomePage,
loginPage,
// ...
) {
// ...
this.remote
.get('some page')
.then(loginPage.doLogin('username', 'password'))
.then(welcomePage.doSomething())
// other stuff
// ...
});
我正在使用 Intern js
进行 UI 自动化项目。我正在使用 page object model
来实现它。我有一个简单的场景,用户在登录页面中输入凭据并导航到欢迎页面。
在我的脚本中,我在 LoginPage
中有一个 'doLogin()' 函数,它负责输入凭据并单击提交按钮。
现在的问题是我想要 doLogin()
到 return WelcomePage
而我无法弄清楚如何做到这一点。
这是我的代码设置:
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();
有人可以帮忙吗??
实现页面对象的一种更灵活的方法是使它们成为辅助函数组(如 Leadfoot 的 pollUntil
)而不是类似命令的对象。
使用该模型,您的 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
});
}
}
};
});
欢迎页面可能看起来像
define([], function () {
return {
doSomething: function () {
return function () {
return this.parent
// more stuff
}
}
};
});
您可以在返回的函数中调用 this.parent
,因为当辅助函数被调用时(作为命令 then
回调),它的上下文将设置为调用它的命令。
你会像
一样使用它们define([
'./WelcomePage',
'./LoginPage',
// ...
], function (
welcomePage,
loginPage,
// ...
) {
// ...
this.remote
.get('some page')
.then(loginPage.doLogin('username', 'password'))
.then(welcomePage.doSomething())
// other stuff
// ...
});