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…
)?它需要返回一个函数,这个函数将被调用,因为它是一个
回调函数,然后是
回调函数。。然后,这种方法很有魅力。。非常感谢你!