代码之家  ›  专栏  ›  技术社区  ›  Ray

是否可以在一个测试中使用多个页面对象而无需链接?

  •  0
  • Ray  · 技术社区  · 9 年前

    我有3个页面对象:main.js,login。js和菜单。js和假设它们具有与文件名相同的函数名,这是一系列测试

    • 登录:login()

    例如,我在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: '' }
    

    如何通过调用页面对象更改客户端? 我的问题有什么合适的解决方案吗? 我查过了 Multiple page objects in one test case

    1 回复  |  直到 9 年前
        1
  •  0
  •   Ray    9 年前

    根据我上面提到的链接问题,我通过添加额外的 在每个页面对象中。

    Main.js:

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

    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(){})
              })
           })