Нажмите на столбец в таблице - Транспортир

У меня довольно большая compelx TABLE в HTML, и мне нужно щелкнуть первую строку:

<div class="ui-grid-canvas"> //this is whole table
 <div ng-repeat="(rowRenderIndex, row) in rowContainer.renderedRows track by $index" class="ui-grid-row ng-scope" ng-style="containerCtrl.rowStyle(rowRenderIndex)" ng-class="{'ui-grid-row-selected': row.isSelected}" style="margin-top: 0px;"> //this is one line
   <div ui-grid-row="row" row-render-index="rowRenderIndex" class="ng-isolate-scope"> //this is blanked part (740x0px)
    <div ng-repeat="(colRenderIndex, col) in colContainer.renderedColumns track by col.colDef.name" class="ui-grid-cell ng-scope ui-grid-col0 ui-grid-row-header-cell" ng-class="{ 'ui-grid-row-header-cell': col.isRowHeader }" ui-grid-cell="">
     <div class="ui-grid-disable-selection ng-scope"> //stil first column
      <div class="ui-grid-cell-contents"> //stil first column
       <div class="ui-grid-selection-row-header-buttons ui-grid-icon-ok ng-scope" ng-class="{'ui-grid-row-selected': row.isSelected}" ng-click="selectButtonClick(row, $event)">&nbsp;</div> //clickable part of first element.

Как это выглядит, мне нужно нажать на строку номер 20, 21,22 здесь кто-нибудь, кто может мне помочь с этим?

Я пытаюсь что-то вроде:

element(by.css('.ui-grid-canvas').row(22)).element(by.css('[ng-click="selectButtonClick(row, $event)"]')).click();

но я получаю ошибку:

r(".ui-grid-canvas") has no method 'row'

Пожалуйста, здесь кто-нибудь, кто может помочь мне с этим?

РЕДАКТИРОВАТЬ: экран кода: введите здесь описание изображения


person Andurit    schedule 02.03.2015    source источник


Ответы (1)


Используйте element.all() с by.repeater():

element.all(by.repeater('(rowRenderIndex, row) in rowContainer.renderedRows')).then(function(arr) {
  arr[20].all(by.css('[ng-click^=selectButtonClick]')).first().click();
});

Вам также может понадобиться прокрутить до элемента, прежде чем щелкнуть мышью:

var scrollIntoView = function () {
    arguments[0].scrollIntoView();
}

element.all(by.repeater('(rowRenderIndex, row) in rowContainer.renderedRows')).then(function(arr) {
    var row = arr[20];
    browser.executeScript(scrollIntoView, row.getWebElement()).then(function () {
        row.all(by.css('[ng-click^=selectButtonClick]')).first().click();
    });
});

Смотрите также:

person alecxe    schedule 02.03.2015
comment
Привет, alecxe, я очень ценю, что ты пытаешься помочь :) Довольно сложно найти что-нибудь для транспортира. В любом случае, я пытаюсь следовать вашему совету, он возвращает мне ошибку: NoSuchElementError: Элемент не найден с использованием локатора: By.cssSelector([ng-click=\selectButtonClick(row, $event)\]) - person Andurit; 02.03.2015
comment
@Andurit, хорошо, но ты уверен, что в каждом повторяющемся разделе есть этот кликабельный div со значением ng-click selectButtonClick(row, $event)? - person alecxe; 02.03.2015
comment
Это будет выглядеть очень хромым, но я не уверен, как это проверить. - person Andurit; 02.03.2015
comment
Дорогой alecxe, спасибо за такой быстрый ответ, действительно здорово видеть, что кто-то так заботится о моей проблеме. Ваш последний код выдает эту ошибку: TypeError: Object function (subLocator) { return this.all(subLocator).toElementFinder_(); } не имеет метода all - person Andurit; 02.03.2015
comment
Ошибка: индекс выходит за границы. Попытка доступа к элементу с индексом: 0, но есть только 0 элементов, соответствующих локатору By.cssSelector([ng-c lick^=selectButtonClick]) - person Andurit; 02.03.2015
comment
@Andurit хорошо, давайте попробуем вместо этого полагаться на класс: arr[20].all(by.css('.ui-grid-selection-row-header-buttons')).first().click(); - person alecxe; 02.03.2015
comment
О, @alecxe Такая же ошибка :(, кстати, отредактировал мой вопрос .... добавив туда экран кода - person Andurit; 02.03.2015
comment
@Andurit, не могли бы вы попробовать изменить индекс и посмотреть, будет ли ошибка воспроизводиться на любом индексе (например, использовать 1 вместо 20 и т. д.)? - person alecxe; 02.03.2015
comment
Хорошо, я попробовал это с inxe 1 и index 2, и это сработало, после этого я попробовал индекс 11, и это не сработало. Я думаю, это может быть потому, что эта часть прокручивается. Таким образом, пользователь не видит индекс 20 при запуске, есть ли способ, как мы можем это исправить? - person Andurit; 02.03.2015
comment
Как вернуть этот элемент вместо того, чтобы нажать здесь - person Prabhu; 01.12.2016