实习生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

    // ...
});