2017-04-05 40 views
1

忽略selectUser函數的佈局。我仍然在試着玩弄它。如何使用頁面對象commands中的函數?在這個函數在每個命令函數內重複5次之前,但是對於清潔來說,顯然需要改變,我只是無法弄清楚。在Nightwatch中使用頁面對象命令內的函數

頁對象片段:

var selectUser = function(userName, password) { 
    return this.waitForElementVisible('@usernameField') 
    .setValue('@usernameField', userName) 
    .setValue('@passwordField', password) 
    .click('@signOnButton') 
    .waitForElementVisible('@eventTaskManager'); 
}; 

module.exports = { 
    elements: { 
    usernameField: '#UserName', 
    passwordField: '#Password', 
    signOnButton: 'input[value="Sign On"]', 
    cancelButton: 'a[href$="/cancel"]', 
    errorMessage: '.icon-warning', 
    eventTaskManager: '.concierge' 
    }, 

    commands: [{ 
    signInAsUniregisteredUser: function() { 
     selectUser(unregisteredUserName, unregisteredUserPass); 
    }, 

    signInAsRegisteredUser: function() { 
     selectUser(registeredUserName, prodRegisteredPass); 
    }, 

    signInAsUnregisteredUser_Regression: function() { 
     selectUser(unregisteredUserName, unregisteredUserPass); 
    }, 

    signInAsRegisteredUser_Regression: function() { 
     selectUser(registeredUserName, prodRegisteredPass); 
    }, 

    signInAsRegisteredUser_Production: function() { 
     selectUser(prodRegisteredUser, prodRegisteredPass); 
    } 
    }] 
}; 

回答

1

首先可言,對於登錄功能,只有2個被登錄「OK」或登錄「失敗」的斷言(未註冊的,錯誤的憑據,缺少用戶名,。 ..),所以你只需要這個頁面對象。

var pageCommands = { 
    tryToLogin: function(userName, password) { 
     return this.waitForElementVisible('@usernameField') 
      .setValue('@usernameField', userName) 
      .setValue('@passwordField', password) 
      .click('@signOnButton'); 
    }, 
    assertLoginSuccesfully: function() { 
     return this.waitForElementVisible('@eventTaskManager'); // login pass  
    }, 
    assertLoginUnSuccesfully: function() { 
     return this.waitForElementVisible('@errorMessage'); // login fail 
    } 
}; 

module.exports = { 
    elements: { 
     usernameField: '#UserName', 
     passwordField: '#Password', 
     signOnButton: 'input[value="Sign On"]', 
     cancelButton: 'a[href$="/cancel"]', 
     errorMessage: '.icon-warning', 
     eventTaskManager: '.concierge' 
    }, 

    commands: [pageCommands], 
}; 

並在測試情況:

const loginPage = browser.page.login(); 
const dataForTest = require('./data.json'); 
const credentials = { 
    username : dataForTest.username , 
    password : dataForTest.password 
}; 

login.tryToLogin(credentials.username,credentials.password) 
    .assertLoginSuccesfully() // if data from dataForTest is correct 

這種做法將讓你通過存儲data.json(或任何你想要的)每一件事遠離硬值。

+0

非常感謝。但總的來說,你將如何在命令中使用函數?假設,讓我們保持值的硬編碼。將量角器腳本轉換爲守夜,並且除登錄示例外還有更多功能。 – inShaneity

相關問題