Assermer la valeur du texte de la liste des webelements à l'aide de nightwatch.js

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).