是否可以在不链接的情况下在单个测试中使用多个页面对象?

Is it possible to use multiple page objects in a single test without chaining?

我有 3 个页面对象:main.js、login.js 和 menu.js 并假设它们的函数名称与文件名相同,即测试系列

例如我在 main.js

中有以下内容
module.exports={
  commands=[{
      main:function(){
        return this.click("@login")
      }
  }],
  elements:{
     login: {
       locateStrategy:'xpath'
       selector: ('//a[@name="Log in"]')
      }
  }
}

其中一个测试顺序是主 -> 登录 -> 菜单。

我尝试了以下方法:

var main = client.page.main()
var login = client.page.login()
var menu=client.page.menu()
...
var ok=main.main()
if(!ok){
 return ok
}else {
 return login.login()&&menu.menu()
}

但不断收到错误消息:

{ status: -1,
  value:
   { error: 'invalid session id',
     message: 'No active session with ID null',
     stacktrace: '' },
  errorStatus: 6,
  error: '' }

如何通过调用页面对象改变客户端? 以及适合我的问题的解决方案吗? 我检查了 ,但这对我的情况并没有真正的帮助,因为我必须多次重复使用这些对象。(不仅仅是 A->B->C,可能是 A->C->B 或A->C)

根据我上面提到的链接问题,我通过在每个页面对象中添加额外的 callback 找到了一个可行的解决方案。

Main.js:

module.exports={
  commands=[{
      main:function(callback){
        return this.click("@login")
                   .perform(callback)
      }
  }],
  elements:{
     login: {
       locateStrategy:'xpath'
       selector: ('//a[@name="Log in"]')
      }
  }
}

Login.js

module.exports={
      commands=[{
          login:function(callback){
            return this.setValue("@id",'admin')
                       .setValue("@pw",'admin')
                       .perform(callback)
          }
      }],
      elements:{
         id: {
           locateStrategy:'xpath'
           selector: ('//input[@name="id"]')
          }
          pw: {
           locateStrategy:'xpath'
           selector: ('//input[@name="password"]')
          }
      }
    }

Menu.js:

module.exports={
  commands=[{
      menu:function(callback){
        return this.waitForElementVisible("@welcome")
                   .perform(callback)
      }
  }],
  elements:{
     welcome: {
       locateStrategy:'xpath'
       selector: ('//a[@name="Welcome !"]')
      }
  }
}

在我的测试中:

var main=client.page.main()
var login=client.page.login()
var menu=client.page.menu()
...
return main.main(function(){
          login.login(function(){
            menu.menu(function(){})
          })
       })

不是我想要实现的方式(不是链接页面对象),但它是这样工作的。