2017-04-05 2 views
1

Ignorer l'emplacement de la fonction selectUser. J'essaie toujours de jouer avec ça. Comment puis-je utiliser des fonctions à l'intérieur de l'objet page commands? Avant cette fonction a été répétée 5 fois à l'intérieur de chaque fonction de commande, mais pour la propreté, cela devait évidemment être changé, je ne peux pas comprendre comment.Utilisation des fonctions à l'intérieur des commandes de page-objet dans Nightwatch

extrait objet Page:

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); 
    } 
    }] 
}; 

Répondre

1

d'abord du tout, pour la fonction de connexion, il n'y a que deux affirmations qui sont LOGIN "ok" ou login "fail" (lettres de créance non enregistrés, mauvais, nom d'utilisateur manquant ,. ..), vous n'avez donc besoin de cela que pour l'objet page.

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], 
}; 

Et dans votre cas de test:

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 

Cette pratique vous tiendra rester à l'écart des valeurs difficiles en stockant tout en data.json (ou tout ce que vous voulez).

+0

Excellent merci. Mais en général, comment utiliseriez-vous les fonctions à l'intérieur des commandes? Hypothétiquement, permet de garder les valeurs codées en dur. Convertir un script de protractor en nightwatch et il y a plus de fonctions que juste l'exemple de connexion. – inShaneity