TestComplete provides program objects that let you access properties of the project’s test items from scripts.
To obtain reference to the whole hierarchy of test items defined in your project, use the Project.TestItems property. It returns the TestItems object, which holds a list of the top-level test items. To refer child items of the top-level test items, use the TestItems.TestItem property with the item’s index specified.
You can also get a reference to the test item that is currently running via the Project.TestItems.Current property.
Each test item is represented by the TestItem object. For each test item’s property available in the Execution Plan editor of the project, the TestItem object provides the corresponding property, which lets you obtain that value. For example, the TestItem.Timeout property returns the item’s timeout value.
The TestItem object also has additional properties, such as ItemCount, which returns the number of item’s child items and TestItem, which returns the reference to the child test item by its index. Using these properties, you can iterate through the child items of the current test item.
The following code example iterates through all test items defined in your project and posts their properties to the log:
JavaScript
function Main ()
{
  for (let i = 0; i < Project.TestItems.ItemCount; i++)
    LogTestItemInfo (Project.TestItems.TestItem(i));
}
function LogTestItemInfo (ti)
{
  var tiinfo = "Name: " + ti.Name + "\r\n" +
           "Description: " + ti.Description + "\r\n" +
           "Test:  " + (!strictEqual(ti.ElementToBeRun, null) ? ti.ElementToBeRun.Caption : "not specified") + "\r\n" +
           "Enabled: " + ti.Enabled + "\r\n" +
           "On error: " + ti.StopOnError + "\r\n" +
           "Count: " + ti.Count + "\r\n" +
           "Timeout: " + ti.Timeout + "\r\n\r\n" +
           "Is currently running: " + ((ti.Iteration > 0) ? "yes" : "no");
  Log.AppendFolder (ti.Name, tiinfo);
  for (let i = 0; i < ti.ItemCount; i++)
    LogTestItemInfo (ti.TestItem(i));
  Log.PopLogFolder();
}
JScript
function Main ()
{
  for (var i = 0; i < Project.TestItems.ItemCount; i++)
    LogTestItemInfo (Project.TestItems.TestItem(i));
}
function LogTestItemInfo (ti)
{
  var tiinfo = "Name: " + ti.Name + "\r\n" +
           "Description: " + ti.Description + "\r\n" +
           "Test:  " + ((ti.ElementToBeRun != null) ? ti.ElementToBeRun.Caption : "not specified") + "\r\n" +
           "Enabled: " + ti.Enabled + "\r\n" +
           "On error: " + ti.StopOnError + "\r\n" +
           "Count: " + ti.Count + "\r\n" +
           "Timeout: " + ti.Timeout + "\r\n\r\n" +
           "Is currently running: " + ((ti.Iteration > 0) ? "yes" : "no");
  Log.AppendFolder (ti.Name, tiinfo);
  for (var i = 0; i < ti.ItemCount; i++)
    LogTestItemInfo (ti.TestItem(i));
  Log.PopLogFolder();
}
Python
def Main():
  for i in range (0, Project.TestItems.ItemCount):
    LogTestItemInfo(Project.TestItems.TestItem[i])
def LogTestItemInfo(ti):
  tiinfo = "Name: " + ti.Name + "\r\n" + \
           "Description: " + ti.Description + "\r\n" + \
           "Test: " + (ti.ElementToBeRun.Caption if ti.ElementToBeRun != None else "not specified") + "\r\n" + \
           "On error: " + str(ti.StopOnError) + "\r\n" + \
           "Count: " + str(ti.Count) + "\r\n" + \
           "Timeout: " + str(ti.Timeout) + "\r\n\r\n" + \
           "Is currently running: " + ( "yes" if (ti.Iteration > 0) else "no")
  Log.AppendFolder(ti.Name, tiinfo)
  for i  in range (0, ti.ItemCount):
    LogTestItemInfo (ti.TestItem[i])
  Log.PopLogFolder()VBScript
Sub Main
  Dim i
  For i = 0 To Project.TestItems.ItemCount-1
    LogTestItemInfo Project.TestItems.TestItem(i)
  Next
End Sub
Sub LogTestItemInfo (ti)
  Dim tiinfo, i
  tiinfo =  "Name: " & ti.Name & vbCrLf & _
           "Description: " & ti.Description & vbCrLf & _
           "Test:  "
  If Not ti.ElementToBeRun Is Nothing Then
    tiinfo = tiinfo & ti.ElementToBeRun.Caption & vbCrLf	
  Else
    tiinfo =	tiinfo & "not specified" & vbCrLf
  End If
  tiinfo =  tiinfo & "Enabled: " & ti.Enabled & vbCrLf & _
           "On error: " & ti.StopOnError & vbCrLf & _
           "Count: " & ti.Count & vbCrLf & _
           "Timeout: " & ti.Timeout & vbCrLf & vbCrLf + _
           "Is currently running: "
  If ti.Iteration > 0 Then
    tiinfo = tiinfo & "yes"
  Else
    tiinfo = tiinfo & "no"
  End If
  Call Log.AppendFolder (ti.Name, tiinfo)
  For i=0 To ti.ItemCount-1
    LogTestItemInfo (ti.TestItem(i))
  Next
  Log.PopLogFolder
End Sub
DelphiScript
procedure LogTestItemInfo (ti);
var tiinfo, i;
begin
  tiinfo := 'Name: ' + ti.Name + #13#10 +
            'Description: ' + ti.Description + #13#10 +
            'Test:  ';
  if (ti.ElementToBeRun <> nil) then
    tiinfo := tiinfo + ti.ElementToBeRun.Caption + #13#10
  else
    tiinfo := tiinfo + 'not specified' + #13#10;
  tiinfo := tiinfo + 'Enabled: ' + aqConvert.VarToStr (ti.Enabled) + #13#10 +
            'On error: ' + aqConvert.VarToStr (ti.StopOnError) + #13#10 +
            'Count: ' + aqConvert.VarToStr (ti.Count) + #13#10 +
            'Timeout: ' + aqConvert.VarToStr (ti.Timeout) + #13#10#13#10 +
            'Is currently running: ';
  if (ti.Iteration > 0) then
    tiinfo := tiinfo + 'yes'
  else
    tiinfo := tiinfo + 'no';
  Log.AppendFolder (ti.Name, tiinfo);
  for i:=0 to ti.ItemCount-1 do
    LogTestItemInfo (ti.TestItem[i]);
  Log.PopLogFolder;
end;
procedure Main;
var i;
begin
  for i:=0 to Project.TestItems.ItemCount-1 do
    LogTestItemInfo (Project.TestItems.TestItem[i]);
end;
C++Script, C#Script
function Main ()
{
  for (var i = 0; i < Project["TestItems"]["ItemCount"]; i++)
    LogTestItemInfo (Project["TestItems"]["TestItem"](i));
}
function LogTestItemInfo (ti)
{
  var tiinfo = "Name: " + ti["Name"] + "\r\n" +
           "Description: " + ti["Description"] + "\r\n" +
           "Test:  " + ((ti["ElementToBeRun"] != null) ? ti["ElementToBeRun"]["Caption"] : "not specified") + "\r\n" +
           "Enabled: " + ti["Enabled"] + "\r\n" +
           "On error: " + ti["StopOnError"] + "\r\n" +
           "Count: " + ti["Count"] + "\r\n" +
           "Timeout: " + ti["Timeout"] + "\r\n\r\n" +
           "Is currently running: " + ((ti["Iteration"] > 0) ? "yes" : "no");
  Log["AppendFolder"] (ti["Name"], tiinfo);
  for (var i = 0; i < ti["ItemCount"]; i++)
    LogTestItemInfo (ti["TestItem"](i));
  Log["PopLogFolder"]();
}
See Also
Tests, Test Items, and Test Cases
Execution Plan Editor
TestItems Property
Projects in TestComplete
