Je suis nouveau sur Cypress et j'ai un petit problème sur lequel j'aimerais avoir de l'aide.
J'ai un champ de saisie dans mon application qui me permet de saisir un nom. Ce nom doit être unique et ne doit pas être identique à un nom existant déjà dans le système.
Je clique actuellement sur ce champ de saisie par:
cy.get('input[type="text" .form-control')
Si j'utilise la commande cy.type ()
, cela tapera toujours la même valeur fournie, mais chaque fois que le test s'exécute, je souhaite attribuer une valeur différente.
// Fill in some details of a new class to proceed with creation cy.get('.pull-left > h4').contains('Add a new class') cy.get('input[type="text"].form-control') // Clicks on the field // Some code to go here to create a random string and use what was created and type this into the field above
Attendu
Créez une fonction qui permet de générer une chaîne aléatoire, puis de la saisir dans le champ de saisie par une commande de cyprès normale.
5 Réponses :
Je fais quelques hypothèses ici. Je suppose qu'il existe une sorte d'API que vous appelez pour vérifier s'il existe un nom en double. Je stuberais / moquerais cela pour contourner le problème. Je prends une supposition ici, mais vous transmettez le nom et vous obtenez quelque chose en retour qui dit vrai ou faux, vous fermez cela pour toujours retourner faux, afin que vous puissiez faire votre duplication.
J'ai créé une fonction unique qui génère la chaîne aléatoire, puis crée une variable pour stocker cette valeur, puis utilise la valeur dans la logique du reste du test.
function generate_random_string(string_length) { let random_string = ''; let random_ascii; for(let i = 0; i < string_length; i++) { random_ascii = Math.floor((Math.random() * 25) + 97); random_string += String.fromCharCode(random_ascii) } return random_string }
J'attribue ensuite ceci à une variable ci-dessous:
var random_string = generate_random_string (8)
Puis le extrait la sortie de celui-ci et mis dans le champ en utilisant les commandes simples get
et type
dans Cypress:
cy.get ('input [type = "text"]. form-control '). type (random_string)
Ceci obtient la valeur et la tape dans le champ que je voulais. Je peux également "random_string" à nouveau dans n'importe quel test, par exemple si je souhaite faire des affirmations plus tard dans le test.
Essayez ce code. J'espère que cela fonctionnera.
cy.get(':nth-child(2) > :nth-child(2) > input').type(userID_Alpha_Numeric()) function userID_Alpha_Numeric() { var text = ""; var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; for (var i = 0; i < 10; i++) text += possible.charAt(Math.floor(Math.random() * possible.length)); return text; }
OU Utilisez le code suivant
cy.get(':nth-child(2) > :nth-child(2) > input').type(userID_Alpha()) function userID_Alpha() { var text = ""; var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; for (var i = 0; i < 10; i++) text += possible.charAt(Math.floor(Math.random() * possible.length)); return text; }
Nouvel utilisateur Cypress ici ... Cela peut-il être écrit dans une commande Cypress Custom? Ou où est un bon endroit pour stocker une fonction d'assistance comme celle-ci, en supposant qu'elle soit utilisée dans plusieurs tests?
example.spec.js it('timestamp', function() { cy.task('datenow').then((random) => { cy.log('test' + random)}) }) plugins/index.js on('task', { datenow () { return Date.now() } }) The above code will generate random strings
Je viens de trouver une autre approche dans un blog, en l'ajoutant ici pour référence.
const uuid = () => Cypress._.random(0, 1e6) const id = uuid() const testname = `testname${id}` cy.get('input').type(testname);
a bien fonctionné pour moi :)
Existe-t-il une sorte d'API qui vérifie si le nom est unique? Quel est le mécanisme qui vérifie votre chaîne pour voir si elle a été utilisée auparavant? J'intercepterais la demande d'API qui vérifie le nom en double afin que vous puissiez le contrôler. Vous pouvez utiliser la chaîne de date ou un guide.