2017-02-10 8 views
0

Я хочу получить элемент ng-repeatater своей меткой aria, но хочу щелкнуть соответствующий тег для этого элемента ретранслятора. Как я могу это сделать с помощью фильтра.Как вернуть индекс элемента с помощью фильтра Protractor с ng-повторителем

Web Page: 
<workspace-group-handler ng-if="!inputCache.search" ng-repeat="group in groups" group="group" class=""><!----> 

<!----><workspace-tile tabindex="0" aria-label="Test" edit-mode="$ctrl.editMode" workspace="$ctrl.group" ng-if="$ctrl.group.type === 'workspace' &amp;&amp; 


<div class="tile" ng-class="{'selected-tile': isSelected}" ng-click="openWorkspace($ctrl.workspace); $ctrl.toggleSelected($ctrl.workspace)" ng-right-click="toggleDropdown($event)" aria-haspopup="true" dnd-draggable="$ctrl.workspace" dnd-dragstart="$ctrl.notifyDragstart()" dnd-dragend="$ctrl.notifyDragend()" role="button" tabindex="0" draggable="true"> 

    <div class="ws-icon"> 

Я пытаюсь следующее:

this.AllWorkspace = element.all(by.repeater('group in groups')); 
this.WSLabel = this.AllWorkspace.all(by.css('workspace-tile')); 
this.WSIcon = this.AllWorkspace.all(by.css('div .ws-icon')); 

WSLabel.filter(function(elem, index) { 
    return elem.getAttribute("aria-label").then(function(text) { 
     return text.toUppercase() === 'TEST', index; //want to return index and element both not sure how to do this 
     }); 
    }).then(function(filteredElements, index) { 
     console.log("Workspace Name found click on it"); 
     this.WSIcon.get(index).click(); 
    }); 

Как я могу вернуть индекс элементов с помощью фильтра? На основе текстового совпадения я хочу получить индекс этого элемента и хочу использовать тот же самый индекс, чтобы щелкнуть по другому элементу.

+0

В селекторе css должно быть пространство - «div .ws-icon». Вместо этого и индекс вы можете использовать .first(). Element ..... – Grasshopper

+0

извините за опечатку в моем коде, но это не настоящая проблема, которую я пытаюсь решить, я модифицирую свой вопрос, пожалуйста, бросьте его еще раз. – ssharma

ответ

0

Вы можете добавить каждый элемент в объект и нажать объект в массив. Должно быть возможным использование каждого метода element.all()

var details = []; 

WSLabel.each(function (elem,index) { 
    elem.getText().then(function (text) { 
     if (text === 'TEST') { 
      var obj = {}; 

      obj.text = text; 
      obj.element = elem; 
      obj.index = index; 

      details.push(obj); 
     } 
    }); 
});