Je suis nouveau à utiliser nightwatch.js. Je souhaite obtenir une liste d'éléments et vérifier la valeur du texte de chaque élément avec une chaîne donnée. J'ai essayé :
function iter(elems) { elems.value.forEach(function(element) { client.elementIdValue(element.ELEMENT) }) }; client.elements('css selector', 'button.my-button.to-iterate', iter);
Pour une autre question de stackoverflow Mais ce que j'utilise maintenant, c'est
waitForElementPresent('elementcss', 5000).assert.containsText('elementcss','Hello')
Et il me renvoie la sortie
Warn: WaitForElement found 5 elements for selector "elementcss". Only the first one will be checked.
Je souhaite donc qu'il vérifie la valeur du texte de chaque élément de liste.
Toutes les choses ne peuvent pas être faites par les commandes simples de Nightwatch js, donc elles ont fourni la commande personnalisée signifie protocole de sélénium. Ici vous pouvez avoir tout le protocole de sélénium . J'ai utilisé le code suivant pour affirmer la valeur du texte de chaque élément avec une chaîne donnée "texte". J'espère que cela vous aidera
module.exports = { '1. test if multiple elements have the same text' : function (browser) { function iter(elems) { elems.value.forEach(function(element) { browser.elementIdText(element.ELEMENT, function(result){ browser.assert.equal(result.value,'text') }) }) }; browser .url('file:///home/user/test.html') .elements('tag name', 'a', iter); } };
Mon extrait HTML
<div id="test"> <a href="google.com" class='red'> text </a> <a href="#" class='red'> text </a> <a href="#" class='red'> text 1</a> </div>
J'ai pu le faire comme suit:
.elements('css selector', 'cssValue', function (elements) { for(var i=0;i<elements.value.length;i++){ var elementCss = 'div.search-results-item:nth-child(' + (i+1) + ') span'; client.assert.containsText(elementCss,'textValue'); } })
Mettez votre fonction iter dans une boucle for et avant cette utilisation
client.elements('css selector', '#CollectionClass', function (result) { if(result.value.length > 1) { var count; for(count=1; count<result.value.length; count++) { result.value.forEach(function(element) { client.elementIdValue(element.ELEMENT); client.elementIdText(selectedHighlight.ELEMENT, function(resuddlt) { this.assert.equal(typeof resuddlt, "object"); this.assert.equal(resuddlt.status, 0); this.assert.equal(resuddlt.value, "your value"); }); } } } };
Vous avez déclaré ce que vous avez essayé (ce qui est bon), mais vous ne nous avez pas présenté de HTML désinfecté qui démontre le problème (ce qui réduit la précision des réponses possibles).
Il existe de nombreuses façons dans HTML de contenir des informations, et le NightWatch containsText
intégré sérialise tout texte qu'il trouve dans une structure contenant des sous-structures.
Par exemple, si vous l'avez suggéré par Juhi,
<div id="test"> <a href="google.com" class='red'> text </a> <a href="#" class='red'> text </a> <a href="#" class='red'> text 1</a> </div>
Ensuite, les assertions
.verify.containsText('#test', ' text ') // first one .verify.containsText('#test', ' text ') // second one .verify.containsText('#test', ' text 1') // third one
Passera, car ils vérifient toutes les informations spécifiques sans avoir besoin d'écrire une boucle. Nightwatch se penchera sur l'élément de test
et sérialisera les éléments dans le text text text 1
Maintenant, si vous avez besoin d'une boucle pour d'autres raisons, tout cela est universitaire, mais votre question originale semble être axée sur la façon d'obtenir l'information sur le texte, pas nécessairement comment exécuter une solution possible au problème (qui émet une boucle).