在Protractor中,我们可以通过 index 从数组中获取单个元素:
var elements = element.all(by.css(".myclass"));
elements.get(1);
elements.first();
elements.last();
但是,是否有可能以类似的方式从元素数组中切割一个子数组?
理想情况下,我们希望有类似的内容:
var subelements = elements.slice(2, 5);
// subelements is also an ElementArrayFinder
// we can call "filter()", "map()" etc on subelements
我认为我们需要通过定义自定义ElementArrayFinder
方法(类似于完成here的方式)来扩展protractor.ElementArrayFinder.prototype.slice()
。
我还注意到this pull request,但它尚未合并,现在不再有效了。
答案 0 :(得分:3)
我害怕没有开箱即用的解决方案。 我相信你可以用.filter()
实现切片首先我想到了:
function slice (arrayFinder, from, to) {
return arrayFinder.filter(function(elem, index) {
if (index >= from && index < to) {
return true;
}
}
}
答案 1 :(得分:1)
您可以直接在已解决的承诺上使用切片:
$$('a')
.then(elements => elements.slice(3, 8))
.then(elements => console.log("Count ", elements.length));
你冷也扩展了ElementArrayFinder
原型:
protractor.ElementArrayFinder.prototype.slice = function(begin, end) {
return this.then(elements => elements.slice(begin, end));
};
$$('a')
.slice(3, 8)
.then(elements => console.log("Count ", elements.length));
使用过滤器:
$$('a')
.filter((e, i) => i >= 3 && i < 8)
.then(elements => console.log("Count ", elements.length));