Как мне выбрать и внутренний текст, и значение из тега опции с помощью NightmareJS 3.0.1

#nightmare

#кошмар

Вопрос:

Я работал над чем-то и увидел, что могу легко объединить два возвращаемых массива, но это не очень СУХО…. Как бы вы подошли к этому???? Мне нужны текст опции И значение, поскольку это разные вещи, но они должны быть возвращены в один и тот же объект, чтобы я мог работать с возвращенными указанными значениями … предпочтительно, если бы я мог каким-то образом сопоставить его, чтобы функция возвращала объект ключа / значения, который был бы еще лучше, но я не могу использовать его.я не уверен, что это возможно:

 //define a new Nightmare method named "textExtract"
//note that it takes a selector as a parameter
Nightmare.action('textExtract', function(selector, done) {
    //`this` is the Nightmare instance
    this.evaluate_now((selector) => {
      //query the document for all elements that match `selector`
      //note that `document.querySelectorAll` returns a DOM list, not an array
      //as such, convert the result to an Array with `Array.from`
      //return the array result
      text =  Array.from(document.querySelectorAll(selector))
        //extract and return the text for each element matched
        .map((element) => element.text );
      elValues =  Array.from(document.querySelectorAll(selector))
        //extract and return the text for each element matched
        .map((element) => element.value );
        return text.concat(elValues)
    //pass done as the first argument, other arguments following
    }, done, selector)
  });
 

ссылка на github.

Ответ №1:

Как насчет этого:

 Nightmare.action('textExtract', function(selector, done) {
  this.evaluate_now((selector) => {
    return Array.from(document.querySelectorAll(selector))
      .map(o => ({value: o.value, text: o.text}))
  }, done, selector)
})
 

в результате получается что-то вроде:

 [
  { text: 'Bob', value: '766' },
  { text: 'Renee', value: '768' },
  { text: 'Paul', value: '787' }
]