2015-05-12 2 views
8

Sono nuovo nell'utilizzo di nightwatch.js. Voglio ottenere un elenco di elementi e verificare il valore del testo di ogni singolo elemento con una determinata stringa. ho provato:Asserire il valore del testo dell'elenco di elementi Web utilizzando nightwatch.js

function iter(elems) { 
     elems.value.forEach(function(element) { 
     client.elementIdValue(element.ELEMENT) 
     }) 
    }; 
    client.elements('css selector', 'button.my-button.to-iterate', iter); 

Per un'altra domanda StackOverflow Ma quello che sto usando in questo momento è

waitForElementPresent('elementcss', 5000).assert.containsText('elementcss','Hello') 

e mi sta tornando l'uscita

Warn: WaitForElement found 5 elements for selector "elementcss". Only the first one will be checked. 

Quindi voglio che dovrebbe verificare il valore del testo di ogni elemento della lista.

risposta

6

Tutte le cose non possono essere eseguite con i comandi semplici di nightwatch js, quindi hanno fornito il comando personalizzato significa protocollo di selenio. Qui puoi avere tutto il selenium protocol. Ho usato il seguente codice per affermare il valore del testo di ogni singolo elemento con una stringa data "testo". Spero che vi aiuterà a

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

    } 

    }; 

mio frammento di codice 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>

2

sono stato in grado di farlo come:

.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'); 
     } 
     }) 
1

Metti la tua funzione iter in una per loop e prima che utilizzare

0

Hai dichiarato quello che hai provato (che è buono) ma non ci hai presentato HTML sanificato che mostri il problema (che riduce la precisione nelle possibili risposte).

Esistono molti modi in HTML per contenere informazioni e il Nightwatch integrato containsText serializza qualsiasi testo che trova all'interno di una struttura che contiene sottostrutture.

Così, per esempio, se si dispone di come suggerito 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> 

Poi le affermazioni

.verify.containsText('#test', ' text ') // first one 
.verify.containsText('#test', ' text ') // second one 
.verify.containsText('#test', ' text 1') // third one 

passerà, perché ogni verificare le informazioni specifiche, senza la necessità per la scrittura di un ciclo. Nightwatch guarderà l'elemento test e serializzerà gli elementi nella stringa

Ora se hai bisogno di un ciclo per altri motivi questo è tutto accademico, ma la tua domanda iniziale sembrava essere mirata a come ottenere le informazioni di testo, non necessariamente come eseguire una possibile soluzione al problema (che sta scrivendo un ciclo).