or

// determine viewport, i.e. how many rows are accessible for that specific panel for (int m = 0; m < 50; m++) { try { if (!hGridView.GetRow(m).Exists) { } } catch (UITestControlNotFoundException) { viewPort = m - 1; break; } } // no extra scrolling required, all rows are accessible if (rowCount <= viewPort + 1) { for (int m = 0; m < rowCount; m++) { rows_output[m] = hGridView.GetRow(m); } return rows_output; } //get all accessible rows before scrolling to expose the rest for (int m = 0; m <= viewPort; m++) { rows_output[m] = hGridView.GetRow(m); col1.Add(hGridView.GetRow(m)); } for (int m = 0; m < viewPort; m++) { Keyboard.SendKeys("{DOWN}"); } for (int i = 0; i <= rowCount - viewPort - 2; i++) { try { // check the row to add isn't a duplicate if (!col1.Contains(hGridView.GetRow(viewPort))) { col1.Add(hGridView.GetRow(viewPort)); } rows_output[i + viewPort + 1] = hGridView.GetRow(viewPort); } catch (UITestControlNotFoundException) { // if for some reason gridview becomes inaccessible break; } //scroll the grid down a bit Keyboard.SendKeys("{DOWN}"); }