nightmare js中选中元素动态列表连续点击操作

Perform click operation in succession on dynamic list of selected elements in nightmare js

我刚开始使用 nightmare。 我在我的网页上使用它进行测试。

我有以下用户界面。

menu

tab1 | tab2 | tab3 ......(dynamically generated tabs)

container div for selected tab

       selected tab data

我得到了包含菜单的 dom 元素。

我不知道如何执行单击每个选项卡并获取所选选项卡数据。

阅读文档后我无法理解这一点,也没有任何示例。

我只能做到这一点 -

var Nightmare = require('nightmare');
var nightmare = Nightmare({ show: true });

nightmare
  .goto('http://www.example.com')
  .wait('#menu')
  .evaluate(function () {
      var menuDiv = document.querySelector('div#menu.content-disp');
      var menuAnchors = menuDiv.querySelectorAll('a[href]');

      var res = "";
      for(var i =0;i<menuAnchors.length;i++){
          res+=menuAnchors[i].innerText;
      }

      return res;
  })
  .end()
  .then(function (result) {
      console.log(result)
  })
  .catch(function (error) {
    console.error('Search failed:', error);
  });

我正在使用 噩梦 版本

"dependencies": {
    "nightmare": "^2.8.1"
  }

构建锚点列表后,您需要迭代它们,使用 Promises 是一项 non-trivial 任务。考虑以下内容,它会遍历您的结果并获取每个页面的标题:

nightmare.then((result) => 
  result.reduce(function(accumulator, url) {
    return accumulator.then(function(results) {
      return nightmare.goto(url)
        .wait('body')
        .title()
        .then(function(result){
          results.push(result);
          return results;
        });
    });
  }, Promise.resolve([])).then(function(results){
    console.dir(results);
});

您可能想 "Asynchronous Operations and Loops" at nightmare-examples 读一读。这应该可以帮助您入门。