如何使用Nightwatch.js从li元素中获取文本内部元素?

时间:2016-07-16 23:58:07

标签: javascript selenium testing

我必须使用NW做一个小测试工具,从一个简单的ol li元素获取数组的标题.Ex:我需要一个数组:Coffe,Tea,Milk。

<ol>
 <li>Coffee</li>
 <li>Tea</li>
 <li>Milk</li>
</ol>

感谢您提前合作。

编辑&gt;&GT;

好吧,感谢@ SoftwareEngineer171,我使用.execute()将js注入到Nightwatch中,现在正在运行。这是我使用的代码,现在正在使用数组..这段代码用@ SoftwareEngineer171代码打印ol列表的li项目(在这种情况下我使用了css选择器)......

module.exports = {
'Demo' : function (client) {
client
  .url('http://mylink.com/items')
  .waitForElementVisible('body', 1000)
  .execute(function(){
    var arr = (function(a, b){
        return (Array(a.length) + '').split(',').map(function(c, d){
            return a[d].innerHTML;
      });
      })(document.getElementsByClassName("listing-view")[0].getElementsByClassName("listing-view-item"));
    return arr;  
  }, ['arr'] ,function(result){
      array_h1 = result.value
      console.log(array_h1.length)
  })
  .pause(5000)
  .end();
  }
};

1 个答案:

答案 0 :(得分:1)

这解决了您的问题。

var arr = (function(a){
    return (Array(a.length) + '').split(',').map(function(c, d){
        return a[d].innerHTML;
    });
})(document.getElementsByTagName('ol')[0].getElementsByTagName('li'));

修改

好的,您要求解释此代码,所以这里是。
首先,我们定义anonymous函数,它需要一个参数(这是代码中的第一个函数),我们将参数document.getElementsByTagName('ol')[0].getElementsByTagName('li')作为变量a传递,代表您的所有<li>元素。现在,a是一个具有HTMLCollection函数的对象,因为它是构造函数,因此它不是一个数组。要从此集合中提取文本,我们必须将其转换为数组。这就是我们创建新数组并将每个元素从HTMLCollection映射到新数组的原因。您看到的第二个函数只是将每个元素从HTMLCollection对象复制到数组,然后返回数组,如您所愿 如果您仍然不清楚constructoranonymous函数,数组映射等是什么,建议您阅读this文章。