2017-08-16 70 views
0

我有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"]') 
     } 
    } 
} 

其中一個測試序列是main - > login - > menu。

我試過如下:

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,但它對我的情況沒有什麼幫助,因爲我必須多次重複使用這些對象(不只是A-> B-> C,可能是A-> C-> B或A-> C)

+0

爲什麼沒有這個鏈接有幫助?那麼代碼如何讓你無法在每次測試中以任何順序使用頁面對象? – JeffC

+0

我想實現的就像'main.main(); login.login(); menu.menu();'沒有回調級別,但在同一個客戶端(瀏覽器) – Raymond

+0

什麼是'main()在'var ok = main.main()'? –

回答

0

繼上面提到的鏈接問題後,我找到了一個工作解決方案,在每個頁面對象中增加了額外的回調

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

不是我想要實現的方式(不是鏈接頁面對象),但它以這種方式工作。

相關問題