2015-11-10 13 views
5

Nie mogę znaleźć poprawnej składni do iteracji przez innerHTML z nodelist w Nightwatch. Próbuję zwrócić adresy URL wszystkich znaczników "a" zawartych w treści treści strony, ale nie mogę znaleźć sposobu na uzyskanie dostępu do wyników polecenia querySelectorAll w nocnym zegarku.Jak iterować poprzez querySelectorAll wyniki w nocnym zegarze

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

Na stronie testowałem 10 linków. Selektor zapytania wydaje się je wszystkie odzyskiwania, ponieważ console.log (tags.value) drukuje następujące:

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

i console.log (tags.value [9]) drukuje:

{ ELEMENT: '10' } 

Nie mogę jednak znaleźć sposobu na pobranie linku z tych wyników. Dołączenie .innerHTML do dowolnej z tych zmiennych zwraca "niezdefiniowane". Czy istnieje sposób do iteracji poprzez querySelectorAll wyników i pobierania adresów URL w nim?

EDIT: Wydaje się, że mogę uzyskać ten sam rezultat, jeśli mogę użyć następującego kodu:

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

I początkowo myślałem, że pracuję w liście węzłów, ale myślę, że rzeczywiście jest zwrócił obiekt WebElement JSON zgodnie z documentation for the .elements command.

Nadal nie mogę uzyskać dostępu do wewnętrznego tekstu. Jakieś pomysły?

+0

Możliwy duplikat [Jak pętli wybranych elementów z document.querySelectorAll] (http://stackoverflow.com/questions/12330086/how- to-loop-through-selected-elements-with-document-queryselectorall) – hippietrail

Odpowiedz

3

Rozwiązałem problem, używając innej metody. Użyłem polecenia browser.elements zamiast querySelectorAll, a następnie użyłem browser.elementIdAttribute, aby uzyskać zawartość każdego atrybutu "href" w każdym tagu "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); 
     }); 
    } 
    }) 

Spowoduje to wydrukowanie każdego linku w treści strony.

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

podanie swojego identyfikatora po „selektor css”