从 Nightwatch 获取列表中元素的数量
Getting the count of elements in a list from Nightwatch
我有以下 DOM 结构:
<div data-qa-id="criteriaDisplay">
<ul>
<li>...</li>
<li>...</li>
<li>...</li>
</ul>
</div>
我想写一个命令 returns 上面列表中的项目数。我是 Nightwatch 的新手。这是我的尝试。我的想法是从criteriaDisplay
元素下的<ul>
开始,然后统计它下面的<li>
项。所以我尝试使用 elementIdElements
api,但它不起作用:
var criteriaDisplayCommands = {
getNumberOfItems: function(callback) {
var self = this;
console.log(this);
return this.api.elementIdElements('@myList', 'css selector', 'li', function(result) {
callback.call(self, result);
});
}
};
module.exports = {
url: function() {
return this.api.launchUrl + '/search';
},
sections: {
criteriaDisplay: {
selector: '[data-qa-id="criteriaDisplay"]',
commands: [criteriaDisplayCommands],
elements: {
myList: 'ul'
}
}
}
};
有人可以帮我找到正确的方法吗?
我认为这是不对的:
return this.api.elementIdElements('@myList', 'css selector', 'li', function(result) {
callback.call(self, result);
});
因为 elementIdElements
要求第一个参数是 elementId
。在你的情况下它是一个 css 选择器.
第二个我不确定的是您在 selenium api 中使用了自定义选择器。我认为这行不通(但我不确定)
来自doc's section about defining-elements:
Using the elements property allows you to refer to the element by its name with an "@" prefix, rather than selector, when calling element commands and assertions (click, etc).
由于您使用的是 selenium api 而不是命令或断言,我认为这不是有效的输入。
您可以使用 elements
或 element
和 elementIdElements
.
简单的只用elements
如下图:
this.api.elements('css selector', 'ul li', function (result) {
console.log(result.value.length) //(if there are 3 li, here should be a count of 3)
callback.call(self, result);
});`
我有以下 DOM 结构:
<div data-qa-id="criteriaDisplay">
<ul>
<li>...</li>
<li>...</li>
<li>...</li>
</ul>
</div>
我想写一个命令 returns 上面列表中的项目数。我是 Nightwatch 的新手。这是我的尝试。我的想法是从criteriaDisplay
元素下的<ul>
开始,然后统计它下面的<li>
项。所以我尝试使用 elementIdElements
api,但它不起作用:
var criteriaDisplayCommands = {
getNumberOfItems: function(callback) {
var self = this;
console.log(this);
return this.api.elementIdElements('@myList', 'css selector', 'li', function(result) {
callback.call(self, result);
});
}
};
module.exports = {
url: function() {
return this.api.launchUrl + '/search';
},
sections: {
criteriaDisplay: {
selector: '[data-qa-id="criteriaDisplay"]',
commands: [criteriaDisplayCommands],
elements: {
myList: 'ul'
}
}
}
};
有人可以帮我找到正确的方法吗?
我认为这是不对的:
return this.api.elementIdElements('@myList', 'css selector', 'li', function(result) {
callback.call(self, result);
});
因为 elementIdElements
要求第一个参数是 elementId
。在你的情况下它是一个 css 选择器.
第二个我不确定的是您在 selenium api 中使用了自定义选择器。我认为这行不通(但我不确定)
来自doc's section about defining-elements:
Using the elements property allows you to refer to the element by its name with an "@" prefix, rather than selector, when calling element commands and assertions (click, etc).
由于您使用的是 selenium api 而不是命令或断言,我认为这不是有效的输入。
您可以使用 elements
或 element
和 elementIdElements
.
简单的只用elements
如下图:
this.api.elements('css selector', 'ul li', function (result) {
console.log(result.value.length) //(if there are 3 li, here should be a count of 3)
callback.call(self, result);
});`