Javascript 实习生js:如何从打开页面的函数返回页面的PageObject?
我正在使用Javascript 实习生js:如何从打开页面的函数返回页面的PageObject?,javascript,promise,intern,pageobjects,Javascript,Promise,Intern,Pageobjects,我正在使用internjs进行一个UI自动化项目。我正在使用页面对象模型实现它。我有一个简单的场景,用户在登录页面中输入凭据,然后导航到欢迎页面。 在我的脚本中,LoginPage中有一个“doLogin()”函数,负责输入凭据并单击提交按钮。 现在的问题是,我想doLogin()返回WelcomePage,但我不知道该怎么做 以下是我的代码设置: LoginPage.js define([], function () {
internjs
进行一个UI自动化项目。我正在使用页面对象模型实现它。我有一个简单的场景,用户在登录页面中输入凭据,然后导航到欢迎页面。
在我的脚本中,LoginPage
中有一个“doLogin()”函数,负责输入凭据并单击提交按钮。
现在的问题是,我想doLogin()
返回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
});
}
}
};
});
WelcomePage可能看起来像
define([], function () {
return {
doSomething: function () {
return function () {
return this.parent
// more stuff
}
}
};
});
您可以在返回的函数中调用this.parent
,因为当调用helper函数时(作为命令然后
回调),它的上下文将设置为调用它的命令
你会像这样使用它们
define([
'./WelcomePage',
'./LoginPage',
// ...
], function (
welcomePage,
loginPage,
// ...
) {
// ...
this.remote
.get('some page')
.then(loginPage.doLogin('username', 'password'))
.then(welcomePage.doSomething())
// other stuff
// ...
});
但是它给出了无法读取未定义的错误的属性'findById'。如果没有更完整的测试用例,很难说。您的doLogin
函数(假设您正在执行类似上述示例的操作)是返回函数,还是返回函数中的内容(this.parent.findById…
)?它需要返回一个函数,这个函数将被调用,因为它是一个回调函数,然后是回调函数。。然后,这种方法很有魅力。。非常感谢你!