Wednesday 15 September 2010

javascript - Using protractor to test infinite scrolling -



javascript - Using protractor to test infinite scrolling -

i don't think strictly infinite scrolling best think of compares seeing.

anyway, using ng-grid show info in table. have 170 items (rows) display. when utilize ng-grid creates repeater. when inspect repeater browser limited 35 items and, scroll downwards list, start lose top rows dom , new rows added @ bottom etc (hence why don't think strictly infinite scrolling adds more rows)

just i'm clear there 35 'ng-repeat=row in rendered rows' elements in dom no matter how far have scrolled down.

this great until comes testing. need text every item in list, using element.all(by.binding('item.name')) or by.repeater or by.css doesn't help there ever 35 items nowadays on page.

now question, how can create can grab 170 items object can iterate through grab text of , store array?

on other pages have less 35 items iv used binding create object, using async.js go on each row , text (see below example, modified extract know wouldn't work is, give reference)

//column info contains 35 rows, need 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 go on each row async.eachseries(coldata, function(coldatarow, nrow){ //get text current async row coldatarow.gettext().then(function(coldatatext){ //add each rows text array coldatatextarr.push(coldatatext); nrow() }); }, function(err){ if(err){ console.log('failed process row') }else{ //perform expect homecoming expect(coldatatextarr).toequal(prevorderarray); } }); }); }

as aside, aware iterating through 170 rows , storing text in array isn't efficient if there improve way of doing i'm open suggestions.

i new javascript , web testing if im not making sense because i'm using wrong terminology or whatever allow me know , i'll seek , explain more clearly.

i think overkill test rows in grid. guess sufficient test values first few rows , then, if absolutely need test elements, utilize evaluate().

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

unfortunately there no code snippet in api page, this:

// grab element want evaluate angular look element(by.css('grid-selector')).evaluate('rows').then(function(rows){ // give value of rows scope variable bound element. expect(rows[169].name).toequal('some name'); });

let me know if works.

javascript angularjs protractor ng-grid

No comments:

Post a Comment