如何点击夜视中的elements命令返回的按钮
client.elements('xpath', ".//a[@class='abcd')]", function (allButtons){
console.log('Element value is '+element)
allButtons.value.forEach(function (element) {
this.elementIdClick(element, function(res){});
}
}
正在运行时我收到错误
元素值是[object Object]
TypeError: Object #<Object> has no method 'elementIdClick'
那么如何从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){});
现在错误是
Element value is [object Object]
TypeError: Cannot read property 'ELEMENT' of undefined
再次回到原始问题。如何使用nightwatchJS
从webelements列表中获取单个元素答案 0 :(得分:3)
以下对我有用:
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
forEach
指向element
,client
:您需要调用client.elementIdClick()
或将{}获得TypeError
。
希望它有所帮助。
答案 1 :(得分:1)
我使用以下策略使用Nightwatch迭代DOM元素:
// 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 :(得分:0)
我认为错误是由console.log()语句生成的。
从elements()命令,allButtons.value
将是多个对象的数组。要访问该数组中的密钥对,您需要指定数组中的位置,然后引用该对象:allButtons.value[index].ELEMENT
因为您只为一个arg提供了.forEach()
循环,所以它将index
解释为array
,并在下面的代码示例中替换了您的本地变量{{1} } element
为清晰起见。也不需要使用.elementIdAttribute()函数; index
返回的号码将作为ID。
allButtons.value[0].ELEMENT
希望有所帮助。