2014-12-11 3 views
2

Как я нажимаю кнопку, возвращенные элементами команды в ночном часовперебор элементов с использованием NightWatchJS

client.elements('xpath', ".//a[@class='abcd')]", function (allButtons){ 
     console.log('Element value is '+element) 
     allButtons.value.forEach(function (element) { 
      this.elementIdClick(element, function(res){}); 
    } 
} 

Во время работы я получаю сообщение об ошибке, как

Element value is [object Object]

TypeError: Object #<Object> has no method 'elementIdClick' 

Так как же я получаю каждый элемент из список элементов, возвращаемый client.elements

Я понял, что параметры для elementIdClick ошибочны, я обновил код как

client.elements('xpath', ".//a[@class='abcd')]", function (allButtons){ 

allButtons.value.forEach(function (element) { 
    console.log('Element value is '+element) 
    this.elementIdClick(this.elementIdAttribute(allButtons.value[element].ELEMENT, 'id'), function(res){}); 

Теперь ошибка

Element value is [object Object] 
    TypeError: Cannot read property 'ELEMENT' of undefined 

Так снова вернуться к первоначальному вопросу. Как я могу получить отдельные элементы из списка webelements с помощью nightwatchJS

+0

что это проблема – Panther

+0

Извините, вопрос обновлен –

ответ

3

Следующие работал для меня:

function iter(elems) { 
    elems.value.forEach(function(element) { 
     client.elementIdClick(element.ELEMENT) 
    }) 
}; 
client.elements('css selector', 'button.my-button.to-iterate', iter); 
  • Каждый element является JSON объект формы { ELEMENT: string } (так, не имеет какого-либо метода . сам)
  • this в forEachделает не точку в element, ни client: вам нужно invoke client.elementIdClick() или получите TypeError.

Надеюсь, что это поможет.

+0

Успех не используется.Я получаю сообщение об ошибке типа TypeError: Не могу прочитать свойства «элементов» undefined Не уверен, что необходимо установить что-то еще для использования протоколов селена. –

+0

это работало как очарование для меня! благодарит @ntabee – Smriti

0

Я думаю, что ошибка генерируется вашим оператором console.log().

Из команды elements(), allButtons.value будет массив нескольких объектов. Для доступа пары ключей в этом массиве, необходимо необходимо указать, где в массиве, а затем ссылаться на объект: allButtons.value[index].ELEMENT

Потому что вы дали .forEach() цикла только один ARG, это толкование, что в качестве index для array, и в мой пример кода ниже я заменил вашу локальную переменную element на index для наглядности. Также нет необходимости использовать функцию .elementIdAttribute(); число, возвращаемое allButtons.value[0].ELEMENT, будет работать как идентификатор.

client.elements('xpath', ".//a[@class='abcd')]", function (allButtons){ 

    allButtons.value.forEach(function (index) { 
    console.log('Element value is '+index.ELEMENT) 
    client.elementIdClick(index.ELEMENT);}}) 

Надеюсь, что это поможет.

1

я использовал следующую стратегию перебрать DOM элементов с использованием Nightwatch:

// Executing a function in the application context. 
client.execute(function() { 

    // Get elements by CSS selector. 
    var elements = document.querySelectorAll('.elements'); 

    // Iterate over them. 
    [].forEach.call(elements, function (element) { 

    // Manipulate each element. 
    element.click(); 
    }); 
}); 

Этот фрагмент кода находится внутри теста, конечно.

Если вы используете jQuery или что-то подобное, вы также можете использовать это.

Смежные вопросы