Javascript 量角器中的切片元件

Javascript 量角器中的切片元件,javascript,selenium,selenium-webdriver,automation,protractor,Javascript,Selenium,Selenium Webdriver,Automation,Protractor,在量角器中,我们可以通过以下方式通过索引从数组中获取单个元素: 但是,是否有可能以类似的方式从元素数组中分割出子数组 理想情况下,我们希望有如下内容: var subelements = elements.slice(2, 5); // subelements is also an ElementArrayFinder // we can call "filter()", "map()" etc on subelements 我认为我们需要通过定义一个定制的量角器.ElementArrayF

在量角器中,我们可以通过以下方式通过索引从数组中获取单个元素:

但是,是否有可能以类似的方式从元素数组中分割出子数组

理想情况下,我们希望有如下内容:

var subelements = elements.slice(2, 5);
// subelements is also an ElementArrayFinder
// we can call "filter()", "map()" etc on subelements

我认为我们需要通过定义一个定制的
量角器.ElementArrayFinder.prototype.slice()
方法来扩展
ElementArrayFinder


我也注意到了,但它没有被合并,也不再处于活动状态。

恐怕没有现成的解决方案。 我相信您可以使用.filter()实现切片

我首先想到的是:

function slice (arrayFinder, from, to) {
    return arrayFinder.filter(function(elem, index) {
        if (index >= from && index < to) {
            return true;
        }
    }
}
函数片(arrayFinder、from、to){
返回数组索引过滤器(函数(元素,索引){
如果(索引>=从&&index
您可以直接在已解析的承诺上使用slice:

$$('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));
$$('a')
.filter((e,i)=>i>=3&&i<8)
.then(elements=>console.log(“Count”,elements.length));

@alecxe不客气,顺便说一句,我喜欢读你关于量角器库的答案。我正在向你学习。继续发布更多答案!如果(…){return true;},请避免使用
如果可能,它会增加缩进级别,并且对于其他开发人员来说更复杂。在这里,您可以只使用
返回索引>=from&&index
。这不起作用,因为element()和element.all()返回ElementFinder和ArrayElementFinder对象,而不是promises。所以$('a')。然后()将在没有此类方法的情况下失败..filter()还返回新的ArrayElementFinder@Xotabu4,是的。扩展的
.slice
返回解析为值数组的承诺。要使其返回和ArrayElementFinder,只需将承诺包装到
ArrayElementFinder
的新实例中即可。
$$('a')
  .filter((e, i) => i >= 3 && i < 8)
  .then(elements => console.log("Count ", elements.length));