When you work with the grid view control, you need to select a specific cell in the grid. This topic describes how you can simulate user actions on the grid view cell.
Simulating Touches
To select a grid view cell, you can use several actions provided by Android GridView object:
TouchCell
,LongTouchCell
, and similar actions – simulate touch or long touch on a specific grid view cell.
All these actions have two parameters:
-
Row - specifies the zero-based index of the row that contains the desired cell.
-
Column - specifies the zero-based index of the column that contains the desired cell.
The following example demonstrates how you can use the mentioned actions in scripts:
JavaScript, JScript
function Test()
{
// Select the Android device
Mobile.SetCurrent("MyDevice");
// Obtain an application
var app = Mobile.Device().Process("com.example.myapp");
// Obtain a grid view
var gridViewObj = app.Layout("layout").GridView("gv");
// Simulates a touch on a cell
gridViewObj.TouchCell(1, 8);
}
Python
def Test():
# Select the Android device
Mobile.SetCurrent("MyDevice")
# Obtain an application
app = Mobile.Device().Process("com.example.myapp")
# Obtain a grid view
gridViewObj = app.Layout("layout").GridView("gv")
# Simulates a touch on a cell
gridViewObj.TouchCell(1, 8)
VBScript
Sub Test()
' Select the Android device
Mobile.SetCurrent("MyDevice")
' Obtain an application
Set app = Mobile.Device.Process("com.example.myapp")
' Obtain a grid view
Set gridViewObj = app.Layout("layout").GridView("gv")
' Simulates a touch on a cell
Call gridViewObj.TouchCell(1, 8)
End Sub
DelphiScript
procedure Test();
var
app, gridViewObj: OleVariant;
begin
// Select the Android device
Mobile.SetCurrent('MyDevice');
// Obtain an application
app := Mobile.Device.Process('com.example.myapp');
// Obtain a grid view
gridViewObj := app.Layout('layout').GridView('gv');
// Simulates a touch on a cell
gridViewObj.TouchCell(1, 8);
end;
C++Script, C#Script
function Test()
{
// Select the Android device
var app = Mobile["SetCurrent"]("MyDevice");
// Obtain an application
var app = Mobile["Device"]["Process"]("com.example.myapp");
// Obtain a grid view
var gridViewObj = app["Layout"]("layout")["GridView"]("gv");
// Simulates a touch on a cell
gridViewObj["TouchCell"](1, 8);
}
Checking Cells Using Native Methods
Currently, TestComplete does not support checkable elements of a grid view. However, you can check and uncheck cells using native methods. This section contains detailed description of how to do this.
Cells of a grid view are represented as child objects of a grid view object. If a cell is checkable, it is a CheckedTextView
object. To set this object to the desired state, you can use the setChecked
native method, that sets the specified state to the desired object. For example:
gridViewObj.CheckedTextView("text1").setChecked(true) // check the item
gridViewObj.CheckedTextView("text1").setChecked(false) // uncheck the item
In order to find the needed item, you can use the ControlText
property, that returns the caption of an item. Note, that items that are out of the screen are not available in the Object Browser. To reach the desired items that are out of the screen, you can use the smoothScrollToOffset
native method. This method scrolls the grid view to the specified items offset. The following code snippet shows how you can use it:
gridViewObj.smoothScrollToOffset(1) // Scroll the grid view to one item down
gridViewObj.smoothScrollToOffset(-1) // Scroll the grid view to one item up
gridViewObj.smoothScrollToOffset(gridViewObj.ChildCount) // Scroll the grid view to the next items, that can be shown on the screen
The collection of the grid view's child objects contains only those objects that are visible on screen. When you scroll the grid view, the child objects that leave the grid area are deleted from the object hierarchy. They are replaced by other child objects that, most likely, have the same recognition attributes. |
To learn if you can scroll to the specified item offset, you can use the canScrollVertically
(canScrollHorizontally
) method.
The following example demonstrates how you can use the mentioned methods:
JavaScript, JScript
function Main()
{
// Select an Android device
Mobile.SetCurrent("MyDevice");
// Obtain an application
var app = Mobile.Device().Process("com.example.myapp");
// Obtain a grid view
var gridViewObj = app.RootLayout("").Layout("layoutTop").GridView("gv_simple");
do
{
// Refresh Object Browser data in order to avoid errors
Mobile.Refresh();
// Iterate through child items of the grid view object
for (var i=0; i< gridViewObj.ChildCount; i++)
{
// Obtain a child object
var child = gridViewObj.Child(i);
// Check whether the child is needed object
if (child.ControlText == "Item12")
{
// Check the needed child
child.setChecked(true);
break;
}
}
// Scroll the grid view
gridViewObj.smoothScrollByOffset(gridViewObj.ChildCount)
}
// If the grid view cannot be scrolled then the script will exit the loop
while (gridViewObj.canScrollVertically(1))
}
Python
def Main():
# Select an Android device
Mobile.SetCurrent("MyDevice")
# Obtain an application
app = Mobile.Device().Process("com.example.myapp")
# Obtain a grid view
gridViewObj = app.RootLayout("").Layout("layoutTop").GridView("gv_simple")
while (gridViewObj.canScrollVertically[1]):
# Refresh Object Browser data in order to avoid errors
Mobile.Refresh()
# Iterate through child items of the grid view object
for i in range(0, gridViewObj.ChildCount):
# Obtain a child object
child = gridViewObj.Child[i]
# Check whether the child is needed object
if (child.ControlText == "Item12"):
# Check the needed child
child.setChecked(True)
break
# Scroll the grid view
gridViewObj.smoothScrollByOffset(gridViewObj.ChildCount)
# If the grid view cannot be scrolled then the script will exit the loop
if not gridViewObj.canScrollVertically[1]:
break
VBScript
Sub Main()
' Select an Android device
Mobile.SetCurrent("MyDevice")
' Obtain an application
Set app = Mobile.Device.Process("com.example.myapp")
' Obtain a grid view
Set gridViewObj = app.RootLayout("").Layout("layoutTop").GridView("gv_simple")
Do
' Refresh Object Browser data in order to avoid errors
Mobile.Refresh()
' Iterate through child items of the grid view object
For i=0 to gridViewObj.ChildCount-1
' Obtain a child object
Set child = gridViewObj.Child(i)
' Check whether the child is the needed object
If child.ControlText = "Item12" Then
' Check the needed child
child.setChecked(true)
Exit For
End If
Next
' Scroll the grid view
gridViewObj.smoothScrollByOffset(gridViewObj.ChildCount)
' If the grid view cannot be scrolled then the script will exit the loop
Loop While (gridViewObj.canScrollVertically(1))
End Sub
DelphiScript
procedure Main();
var
app, gridViewObj, i, child: OleVariant;
begin
// Select an Android device
Mobile.SetCurrent('MyDevice');
// Obtain an application
app := Mobile.Device.Process('com.example.myapp');
// Obtain a grid view
gridViewObj := app.RootLayout('').Layout('layoutTop').GridView('gv_simple');
repeat
begin
// Refresh Object Browser data in order to avoid errors
Mobile.Refresh();
// Iterate through child items of the grid view object
for i:=0 to gridViewObj.ChildCount-1 do
begin
// Obtain a child object
child := gridViewObj.Child(i);
// Check whether the child is the needed object
if (child.ControlText = 'Item12') then
begin
// Check the needed child
child.setChecked(true);
break;
end;
end;
// Scroll the grid view
gridViewObj.smoothScrollByOffset(gridViewObj.ChildCount)
end;
// If the grid view cannot be scrolled then the script will exit the loop
until (not gridViewObj.canScrollVertically(1))
end;
C++Script, C#Script
function Main()
{
// Select an Android device
Mobile["SetCurrent"]("MyDevice");
// Obtain an application
var app = Mobile["Device"]["Process"]("com.example.myapp");
// Obtain a grid view
var gridViewObj = app["RootLayout"]("")["Layout"]("layoutTop")["GridView"]("gv_simple");
do
{
// Refresh Object Browser data in order to avoid errors
Mobile["Refresh"]();
// Iterate through child items of the grid view object
for (var i=0; i< gridViewObj["ChildCount"]; i++)
{
// Obtain a child object
var child = gridViewObj["Child"](i);
// Check whether the child is the needed object
if (child["ControlText"] == "Item12")
{
// Check the needed child
child["setChecked"](true);
break;
}
}
// Scroll the grid view
gridViewObj["smoothScrollByOffset"](gridViewObj["ChildCount"])
}
// If the grid view cannot be scrolled then script will exit the loop
while (gridViewObj["canScrollVertically"](1))
}
Using Keyword Operations
This topic explains how to simulate touches on the grid view control in scripts. You can use the described actions in keyword tests too. To do this, use the On-Screen Action or the Call Object Method operations.
See Also
Working With Android Grid View Controls
Working With Android Grid View Controls - Basic Concepts
Android GridView Support