在量角器中切片元素

时间:2016-06-12 14:06:19

标签: javascript selenium selenium-webdriver automation protractor

在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,但它尚未合并,现在不再有效了。

2 个答案:

答案 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));