2014-11-04 1 views
1

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

В любом случае мы используем ng-сетку для отображения данных в таблице. У нас есть примерно 170 элементов (строк) для отображения. когда мы используем ng-grid, он создает ретранслятор. Когда я проверяю этот ретранслятор из браузера, его ограничивают до 35 элементов и, когда вы прокручиваете список вниз, вы начинаете терять верхние строки из dom, а новые строки добавляются снизу и т. Д. (Следовательно, почему я не думаю, что его строго бесконечная прокрутка, так как обычно просто добавляется больше строк)

Просто так, что в доме всегда есть 35 'ng-repeat=row in rendered rows' элементов, независимо от того, как далеко вы прокрутили вниз.

Это здорово, пока не дойдет до тестирования. Мне нужно получить текст для каждого элемента в списке, но использование element.all(by.binding('item.name')) или by.repeater или by.css не помогает, поскольку на странице есть только 35 элементов.

Теперь, к моему вопросу, как я могу сделать так, чтобы я мог захватить все 170 элементов как объект, который я могу затем перебрать, чтобы захватить текст и сохранить его как массив?

на других страницах, где у нас есть менее 35 наименований, я использовал привязку для создания объекта, а затем используя async.js для перехода по каждой строке и получения текста (см. Ниже пример, это измененный экстракт, который я знаю это, вероятно, не будет работать, как это, его просто чтобы дать вам ссылка)

  //column data contains only 35 rows, i need all 170.  
     var columnData = element.all(by.binding('row.entity.name')) 
     , colDataTextArr = [] 
      //prevOrderArray gets created elsewhere 
     , prevOrderArray = ['item1', 'item2'... 'item 169', 'item 170'];  

     function(columnData, colDataTextArr, prevOrderArray){ 
     columnData.then(function(colData){ 
      //using async to go over each row 
      async.eachSeries(colData, function(colDataRow, nRow){ 
       //get the text for the current async row 
      colDataRow.getText().then(function(colDataText){ 
       //add each rows text to an array 
       colDataTextArr.push(colDataText); 
       nRow() 
      }); 
      }, function(err){ 
      if(err){ 
       console.log('Failed to process a row') 
      }else{ 
       //perform the expect 
       return expect(colDataTextArr).toEqual(prevOrderArray); 
      } 
      }); 
     }); 
     } 

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

Я довольно новичок в JavaScript и веб-тестировании, поэтому, если я не понимаю смысла, потому что я использую неправильную терминологию или что-то еще, дайте мне знать, и я попытаюсь объяснить более четко.

ответ

2

Я думаю, что это перебор, чтобы проверить все строки в сетке. Я думаю, было бы достаточно проверить, что вы получаете значения для первых нескольких строк, а затем, если вам абсолютно необходимо проверить все элементы, используйте функцию оценки().

http://angular.github.io/protractor/#/api?view=ElementFinder.prototype.evaluate

К сожалению, нет фрагмента кода на странице апи, но это будет выглядеть примерно так:

// Grab an element where you want to evaluate an angular expression 
element(by.css('grid-selector')).evaluate('rows').then(function(rows){ 
    // This will give you the value of the rows scope variable bound to the element. 
    expect(rows[169].name).toEqual('some name'); 
}); 

Позвольте мне знать, если он работает.

+0

Да, это то, что я думаю, что мне придется уйти в отставку, эта часть в основном проверяет правильность порядка сортировки и, соответственно, меняет ее, я просто использую эту логику на других страницах и немного ленив , но я думаю, что вы правы, я буду проверять, что первые несколько строк находятся в правильном порядке в соответствии с выбранным порядком сортировки, и когда я приступаю к фактической проверке ответа api, я буду оценивать привязку, спасибо. отметив правильный ответ, потому что, хотя я не хотел, чтобы я в идеале хотел, что вы предлагаете, это то, что я собираюсь реализовать. – Sirk