Виртуальный ретранслятор и транспортир

Вопрос:

Каков канонический/предпочтительный способ поиска виртуальных ретрансляторов в Protractor?

История:

В дизайне Angular Material существует Виртуальный ретранслятор, который помогает улучшить производительность рендеринга с помощью динамического повторного использования строк, видимых в области области просмотра. Пример:

<div class="md-virtual-repeat-offsetter" style="transform: translateY(0px);">
    <div md-virtual-repeat="item in ctrl.dynamicItems" md-on-demand="" class="repeated-item ng-binding ng-scope flex" flex="">0</div>
    <div md-virtual-repeat="item in ctrl.dynamicItems" md-on-demand="" class="repeated-item ng-binding ng-scope flex" flex="">1</div>
    <div md-virtual-repeat="item in ctrl.dynamicItems" md-on-demand="" class="repeated-item ng-binding ng-scope flex" flex="">2</div>
</div>

На данный момент я должен использовать метод by.css:

$$('[md-virtual-repeat="item in ctrl.dynamicItems"]');

Бонусный вопрос:

Есть ли способ сделать by.repeater также работать с md-virtual-repeat?

Ответы

Ответ 1

В соответствии с findRepeaterRows() и repeaterMatch() встроенные функции, by.repeater locator использует селектор CSS для поиска разных атрибутов "repeat" с разными префиксами:

ng-repeat
ng_repeat
data-ng-repeat
x-ng-repeat
ng:repeat

Затем он разбивает все фильтры, отслеживание (track by), псевдонимы (as) и затем проверяет, какое значение повторителя мы пытаемся сопоставить.

Другими словами, by.repeater в данный момент не найдет виртуальных повторителей.

Создан запрос функции здесь:


В этот момент, учитывая, что виртуальные повторители не поддерживают расширенные синтаксические элементы как track или as, я думаю, что использование селектора CSS достаточно хорошо:

$$('[md-virtual-repeat="item in ctrl.dynamicItems"]');