2015-11-10 16 views
5

Ich kann nicht scheinen, die richtige Syntax für das Durchlaufen der innerenHTML einer Nodelist in Nightwatch zu finden. Ich versuche, die URLs jedes "a" -Tags zurückzugeben, die im Body-Inhalt einer Seite enthalten sind, aber ich kann keine Möglichkeit finden, auf die Ergebnisse meines querySelectorAll-Befehls in Nightwatch zuzugreifen.Wie iterate durch querySelectorAll Ergebnisse in Nightwatch

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

Es gibt 10 Links auf der Seite, die ich gerade teste. Die Abfrage Wähler scheint sie alle, da console.log (tags.value) druckt die folgenden werden das Abrufen:

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

und console.log (tags.value [9]) druckt:

{ ELEMENT: '10' } 

Ich kann jedoch keine Möglichkeit finden, den Link von diesen Ergebnissen abzurufen. Das Anfügen von .innerHTML an eine dieser Variablen gibt 'undefined' zurück. Gibt es eine Möglichkeit für mich, die querySelectorAll-Ergebnisse zu durchlaufen und die URLs darin abzurufen?

EDIT: Es scheint, wie ich das gleiche Ergebnis kann, wenn ich den folgenden Code verwenden:

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

Ich habe gedacht, dass ich mit einem Nodelist arbeite, aber ich glaube, ich bin zu sein eigentlich gab ein WebElement-JSON-Objekt gemäß der documentation for the .elements command zurück.

Ich kann immer noch nicht auf den inneren Text zugreifen. Irgendwelche Ideen?

+0

Mögliches Duplikat von [Wie Schleife durch ausgewählte Elemente mit document.querySelectorAll] (http://stackoverflow.com/questions/12330086/how- to-loop-through-selected-elements-with-document-queryselektorall) – hippietrail

Antwort

3

Ich löste das Problem mit einer anderen Methode. Ich habe den Befehl browser.elements anstelle von querySelectorAll verwendet und dann browser.elementIdAttribute verwendet, um den Inhalt jedes 'href'-Attributs in jedem' a'-Tag abzurufen.

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

Dies druckt jeden Link innerhalb des Inhalts der Seite aus.

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; 
    }, 

Füllen Sie Ihre IDs nach dem ‚CSS-Selektor‘