3

В транспортире, мы можем получить один элемент из массива по индексу через:Нарезных элементы транспортир

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 путем определения метода пользовательского protractor.ElementArrayFinder.prototype.slice() (аналогично тому, как это было сделано here).

Я также заметил this pull request, но он не был объединен, и он больше неактивен.

ответ

3

Исключительное решение я не боюсь. Я считаю, что вы можете осуществить нарезку с .filter()

Первое, что приходит мне на ум:

function slice (arrayFinder, from, to) { 
    return arrayFinder.filter(function(elem, index) { 
     if (index >= from && index < to) { 
      return true; 
     } 
    } 
} 
+0

О, да, это должно сработать. Хорошая идея, спасибо. – alecxe

+0

@alecxe приветствую вас, btw Мне нравится читать ответы для транспортира – Xotabu4

+0

Спасибо. И я учусь от твоей. Продолжайте размещать больше ответов! – alecxe

1

Вы можете использовать ломтик прямо на разрешенном обещание:

$$('a') 
    .then(elements => elements.slice(3, 8)) 
    .then(elements => console.log("Count ", elements.length)); 

Вы также COLD удлинить прототип ElementArrayFinder:

И с a Фильтр:

$$('a') 
    .filter((e, i) => i >= 3 && i < 8) 
    .then(elements => console.log("Count ", elements.length)); 
+0

Это не работает, поскольку element() и element.all() возвращают объекты ElementFinder и ArrayElementFinder, а не обещают. Итак, $$ ('a'). Then() не будет работать без такого метода. .filter() также возвращает новый ArrayElementFinder – Xotabu4

+1

@ Xotabu4, да, он работает. Расширенное '.slice' возвращает обещание, которое разрешает массив значений. Чтобы вернуть его и ArrayElementFinder, это так же просто, как обертывание обещания в новом экземпляре 'ArrayElementFinder'. –