2015-11-10 12 views
5

Non riesco a trovare la sintassi corretta per l'iterazione tramite innerHTML di un nodelist in Nightwatch. Sto cercando di restituire gli URL di ogni tag "a" contenuto nel contenuto del corpo di una pagina, ma non riesco a trovare un modo per accedere ai risultati del mio comando querySelectorAll in Nightwatch.Come eseguire un'iterazione tramite querySelectorTutti i risultati in Nightwatch

browser.execute(function() { 
    return document.querySelectorAll("div.field-item.even a"); 
}, 
function(tags){ 
    console.log(tags.value); 
    console.log(tags.value[9]); 
}) 

Ci sono 10 collegamenti sulla pagina che sto testando. Il selettore di query sembra essere tutti recuperato, poiché console.log (tags.value) stampa i seguenti:

[ { ELEMENT: '1' }, 
    { ELEMENT: '2' }, 
    { ELEMENT: '3' }, 
    { ELEMENT: '4' }, 
    { ELEMENT: '5' }, 
    { ELEMENT: '6' }, 
    { ELEMENT: '7' }, 
    { ELEMENT: '8' }, 
    { ELEMENT: '9' }, 
    { ELEMENT: '10' } ] 

e console.log (tags.value [9]): stampe

{ ELEMENT: '10' } 

Non riesco a trovare un modo per recuperare il collegamento da questi risultati, tuttavia. L'aggiunta di .innerHTML a una di queste variabili restituisce "indefinito". C'è un modo per me di scorrere i risultati querySelectorAll e recuperare gli URL all'interno di esso?

EDIT: Sembra che posso ottenere lo stesso risultato se uso il seguente codice:

browser.elements("css selector", "div.field-item.even a", function(tags) { 
    console.log(tags.value); 
    console.log(tags.value[9]); 
}) 

Ho inizialmente pensato che stavo lavorando con un NodeList, ma penso che sto essere effettivamente ha restituito un oggetto JSON WebElement come da documentation for the .elements command.

Non riesco ancora ad accedere al testo interno, tuttavia. Qualche idea?

+0

Eventuali duplicati di [Come scorrere gli elementi selezionati con document.querySelectorAll] (http://stackoverflow.com/questions/12330086/how- a-loop-through-selezionata-elementi-con-documento querySelectorAll) – hippietrail

risposta

3

Ho risolto il problema utilizzando un metodo diverso. Ho usato il comando browser.elements invece di querySelectorAll e quindi ho usato browser.elementIdAttribute per ottenere il contenuto di ciascun attributo 'href' in ogni tag 'a'.

//Get an WebElement JSON object array of all urls 
    browser.elements("css selector", "div.field-item.even a", function(link_array) { 
    for (var x = 0; x < link_array.value.length; x++){ 
     //Fetch the url from each 'a' tag in the content 
     browser.elementIdAttribute(link_array.value[x].ELEMENT, "href", function(links) { 
     console.log(links.value); 
     }); 
    } 
    }) 

Stampa tutti i collegamenti all'interno del contenuto della pagina.

0
selectAllRoles: function (client) { 
     client.elements('css selector', '.editorDetail ul li input[type=checkbox]', function(res) { 
      res.value.forEach(elementObject => { 
       client.elementIdClick(elementObject.ELEMENT); 

      }); 
     }); 

     return this; 
    }, 

Inserisci i tuoi id dopo il 'selettore CSS'

Problemi correlati