Je cherche un moyen de récupérer une valeur de retour retournée par une commande Cypress personnalisée.
J'utilise actuellement Cypress et Cypress-promise lib ( https://www.npmjs.com/package/cypress-promise )
Actuellement, le résultat est que: log1 = CAR 1 log2 = null
Où est mon erreur?
Fichier de test:
it('Test 1', async function() {
const carName = await promisify(cy.set_typeCarName());
cy.log("log2 = " + carName );
});
module:
set_typeCarName() {
let carName = "CAR 1";
cy.get('#newSiteCityInput').type(carName);
cy.log("log1 = " + carName);
return carName;
};
Cypress.Commands.add('set_typeCarName',() => {
webnewsite.set_typeCarName();
});
La commande manque-t-elle une instruction return
?
Cypress.Commands.add('set_typeCarName',() => {
return webnewsite.set_typeCarName(); // I added the initial `return`
});
Cypress introduit une nouvelle façon d'écrire du code au lieu de renvoyer des valeurs, c'est-à-dire en utilisant un alias. https://docs.cypress.io/guides/core-concepts/variables-and-aliases.html#Closures
Manière normale d'écrire du code
async function compute(){
const value = await (asynchronous function);
return value;
}
const x = await compute(); // #a
console.log(x); // #b
Comment faire est dans Cypress, car nous ne pouvons pas utiliser async/wait dans cypress
function() compute{
cy.get('p#text').then(p => {
const text = p.textContent;
cy.wrap(text).as('pText');
//even if we return text from here, it will not be accessible anywhere
});
}
compute(); // #a
cy.get('@pText').then(text => {
console.log(text); // #b
}
Le nœud est d'alias la valeur puis de l'utiliser dans la commande suivante
car
Cypress passe d'abord par tout le code et met les commandes en file d'attente
une fois que le code est dans la file d'attente, la prochaine commande dans la file d'attente ne s'exécutera qu'une fois tous les rappels de la commande actuelle terminés, nous pouvons donc utiliser le modèle de code ci-dessus.