使用 NightWatchJS 迭代元素

Mos*_*rge 5 automation nightwatch.js

我如何在夜间值班中单击元素命令返回的按钮

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

在运行时我收到一个错误

元素值为 [object Object]

TypeError: Object #<Object> has no method 'elementIdClick'
Run Code Online (Sandbox Code Playgroud)

那么我如何从返回的元素列表中获取每个元素 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){});
Run Code Online (Sandbox Code Playgroud)

现在的错误是

Element value is [object Object]
    TypeError: Cannot read property 'ELEMENT' of undefined
Run Code Online (Sandbox Code Playgroud)

所以再次回到原来的问题。我如何使用 nightwatchJS 从网络元素列表中获取单个元素

小智 6

以下对我有用:

function iter(elems) {
    elems.value.forEach(function(element) {
        client.elementIdClick(element.ELEMENT)
    })
};
client.elements('css selector', 'button.my-button.to-iterate', iter);
Run Code Online (Sandbox Code Playgroud)
  • 每个element都是表单的JSON对象{ ELEMENT: string }(因此,本身没有方法。)
  • this在forEach不不指向element,也不client:你需要调用client.elementIdClick()或会得到一个TypeError。

希望能帮助到你。