Extracting data from a combobox/list control (JComboBox)

You can use Functional Tester's getTestData method to access the values in the list of a ComboBox/List control.

The following example tests against the Classics Java application:

import resources.GetListDataExampleHelper;

import com.rational.test.ft.*;
import com.rational.test.ft.object.interfaces.*;
import com.rational.test.ft.object.interfaces.SAP.*;
import com.rational.test.ft.object.interfaces.siebel.*;
import com.rational.test.ft.script.*;
import com.rational.test.ft.value.*;
import com.rational.test.ft.vp.*;

/**
 * Description   : Functional Test Script
 * @author Administrator
 */
public class GetListDataExample extends GetListDataExampleHelper
{
/**
* Script Name   : GetListDataExample
* Generated     : May 16, 2006 9:06:46 AM
* Description   : Functional Tester Script
* Original Host : WinNT Version 5.1  Build 2600 (S)
* 
* @since  2006/05/16
* @author Administrator
*/
public void testMain(Object[] args) 
{
startApp("ClassicsJavaA");

// Frame: ClassicsCD
tree2().click(atPath("Composers->Schubert->Location(PLUS_MINUS)"));
tree2().click(atPath("Composers->Schubert->Die schone Mullerin, Op. 25"));
placeOrder().click();

//Declare variables for list
ITestDataList nameList;
ITestDataElementList nameListElements;
ITestDataElement nameListElement;

//Frame: Member Logon
nameCombo().waitForExistence();

//Available test data types: {selected=Selected List Element, //list=List Elements}
java.util.Hashtable ht = nameCombo().getTestDataTypes();
System.out.println(ht);

//Get all elements
nameList = (ITestDataList)nameCombo().getTestData("list");
nameListElements = nameList.getElements();

int listElemCount = nameList.getElementCount();

  for (int i = 0; i < listElemCount; i++)
  {
  nameListElement = nameListElements.getElement(i);
  System.out.println(nameListElement.getElement());
  
  // Click on each element
  nameCombo().click();
  nameCombo().click(atText(nameListElement.getElement().toString()));
  };
  
cancel().click();

// Frame: ClassicsCD
classicsJava(ANY,MAY_EXIT).close();
}
}

This example first opens up the Classics Java application. It selects a composer in the tree and an album (composer = Schubert, album = "Die Schone Muellerin") and clicks the Place Order button. In the next screen (Member Login - dialog) the sample code extracts the list of values from the ComboBox and displays them in the console window before clicking on each list element.

The first step is to extract the data from the control by using the getTestData method:

ITestDataList nameList;
nameList = (ITestDataList)nameCombo().getTestData("list")

To find out which data types are available for a control, use the following code:

java.util.Hashtable ht = nameCombo().getTestDataTypes();

Given this data set, you can create an array that contains all of the elements of the list. This is done as follows:

ITestDataElementList nameListElements;
nameListElements = nameList.getElements();

With the list elements in hand, you can create a loop that accesses each list element. To determine the number of list elements, use the getElementCount method. To extract the value of the list element, the getElement method is used. In the example, this is done with the following code:

int listElemCount = nameList.getElementCount();

for (int i = 0; i < listElemCount; i++)
{
  nameListElement = nameListElements.getElement(i);
  System.out.println(nameListElement.getElement());
  
  // Click on each element
  nameCombo().click();
  nameCombo().click(atText(nameListElement.getElement().toString()));
};