首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用NightWatchJS迭代元素

使用NightWatchJS迭代元素
EN

Stack Overflow用户
提问于 2014-12-11 20:04:58
回答 3查看 11.8K关注 0票数 5

如何单击“夜间监视”中元素命令返回的按钮?

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

在运行时,我收到了一个错误,如

元素值是对象对象。 TypeError: Object #没有方法“elementIdClick”

那么如何从client.elements返回的元素列表中获取每个元素

我意识到elementIdClick的参数是错误的,我将代码更新为

代码语言:javascript
复制
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){});

现在错误是

代码语言:javascript
复制
Element value is [object Object]
    TypeError: Cannot read property 'ELEMENT' of undefined

所以再回到原来的问题。如何使用nightwatchJS从一组元素列表中获取各个元素

EN

回答 3

Stack Overflow用户

发布于 2015-01-15 09:13:42

以下几点对我有用:

代码语言:javascript
复制
function iter(elems) {
    elems.value.forEach(function(element) {
        client.elementIdClick(element.ELEMENT)
    })
};
client.elements('css selector', 'button.my-button.to-iterate', iter);
  • 每个element都是表单{ ELEMENT: string }的JSON对象(因此,没有方法本身)。
  • this in forEach不指向element,也不指向client:您需要调用client.elementIdClick()或将获得TypeError

希望能帮上忙。

票数 6
EN

Stack Overflow用户

发布于 2016-12-12 22:51:22

我使用以下策略来使用Nightwatch迭代DOM元素:

代码语言:javascript
复制
// 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或类似的东西,您也可以使用它。

票数 2
EN

Stack Overflow用户

发布于 2015-10-27 20:29:31

我认为错误是由console.log()语句生成的。

从元素()命令中,allButtons.value将是多个对象的数组。要访问该数组中的密钥对,需要指定数组中的位置,然后引用对象:allButtons.value[index].ELEMENT

因为您只给了.forEach()循环一个arg,所以它将其解释为arrayindex,在下面的代码示例中,为了清晰起见,我用index替换了局部变量element。也不需要使用.elementIdAttribute()函数;allButtons.value[0].ELEMENT返回的数字将用作id。

代码语言:javascript
复制
client.elements('xpath', ".//a[@class='abcd')]", function (allButtons){

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

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27431450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档