Open Test Framework  
Player Monitor Editor


OTX projects can be executed in different ways. The easiest and most comfortable way is the Open Test Player. With the Player Editor, the author can create a simple tester interface with various controls in just a few minutes. OTX procedures can be started and their parameters can be bound to controls using drag & drop. The result can be exported to a PPX file, which can be executed inside the stand-alone available Open Test Player.

The structure and features of the Player Editor are described in the following sections.


In the Player Editor the graphical user interface for a stand alone executable tester can be designed, see the image below. Each Player Editor consists of one Monitor. A Monitor represents a register tab inside the Open Test Player. A Monitor has a table layout consisting of a number of rows and columns. A monitor contains one or more panels which are arranged inside the table layout rows and columns.

There are three kind of panels:

  • Command Panel
  • Control Panel
  • HMI Panel

The command panel contains the executable commands. A command is represented by a button which can call an OTX procedure. The parameters of such procedure can be set via the controls inside the control panel. There are different controls for different graphical representation of a parameter, context or state variable which are described below. The HMI panel contains an OTX screen which behavior is managed inside the OTX runtime environment.


One player editor in the OTF associates with a Monitor which is a registered tab to play in the Open Test Player. Through the monitor tabs the data of the test sequences can be displayed in the customized graphic interfaces according to the users' design, especially according to a company's CI.

A player project in the OTF may contain many Monitors, each Monitor can be opened in a player editor for designing. When the player project is exported as a PPX file and loaded in the Open Test Player, all the Monitors in the PPX file shall be displayed as registered tabs to play.

Table Layout

Each Monitor has a table layout (saved in the *.playLay file) which contains the layout of rows/columns/panels and the controls in the panels.

There must be at least one row and one column. To manage the row and column, you can edit the rows and columns directly in the player editor or indirectly through the row/column collection editor.

Editing rows/columns directly in the player editor

In the player editor, you can adjust the height/width of the row/column by dragging the border between the 2 rows (or 2 columns). You can also use the context menu with a row/column by right-clicking on the header of the row/column (the dark gray strife at the leftmost/topmost of a row/column).

Belows are the entries of the context menu (according to their positions from top to bottom):

Context menu entry Description
AutoSize Sets the height/width of the current row/column to auto-size.
Percent Sets the height/width of the current row/column to a certain percent.
Absolute Sets the height/width of the current row/column to an absolute pixel.
Add Row/Column Appends a new row/column after the last row/column.
Insert Row/Column Adds a new row/column before the current row/column.
Delete Row/Column Deletes the current row/column.

Editing rows/columns through the collection editor

To open the rows/columns editor of a Monitor, you can double click on the Rows/Columns node of the corresponding Monitor node in the Solution Explorer. The row/column collection editor contains 2 parts, the left part displays the list of the existing rows/columns of the Monitor, the right part displays the details of the selected rows/columns in the left part. In the left part, you can add a new row/column using 'Add' button, delete the selected rows/columns using 'Remove' button or move a selected row/column using Up or Down arrow in the middle of the 2 parts. In the right part, you can change the width style of the row/column and the absolute value to use with the width style. Please note that the absolute value is only applied for the width styles: 'Absolute' and 'Percent'.


Each panel has a certain location (the number of the row and the column) which it stays on. A panel can be spanned across many rows and columns. Please note that a panel can not overlap another panel.

You can edit the the settings (properties) of a panel by opening the Properties Window and selecting the panel in the player editor or in the Solution Explorer.

As introduced above, there are 3 kinds of panel: Command panel, Control panel and HMI panel. All the 3 panels have the same settings as follows:

General Setting Description
General -
General.Name Sets the unique name of the panel.
General.Title -
General.Title.TI Sets the text identifiers for multi-languages.
General.Title.Value Sets the title of the panel which is displayed at the top-left of the panel.
Layout -
Layout.Column Sets the main column (in number) where the panel stays on.
Layout.ColumnSpan Sets the number of columns the panel shall span across.
Layout.Row Sets the number of the main row where the panel stays on.
Layout.RowSpan Sets the number of columns the panel shall span down.
Layout.GrowStyle Sets the style how the elements will be added. 'Horizontal' style means that the commands/controls will be added horizontally into the panel. 'Vertical' style means they will be added vertically into the panel.
Layout.AutoScroll Enables users to scroll to any commands/controls placed outside of its visible boundaries (True). Otherwise, some commands/controls may be hidden (False).

Besides using the Properties Window to edit a panel, you can use the context menu by right-clicking on the corresponding panel in the current player editor. The context menu allows you to change the 'GrowStyle' property of the panel or to delete the panel (the same as using DEL key). You can also move a panel into the empty space in the Table Layout with dragging and dropping, or you can make a panel to span across the rows/columns or not by clicking on the anchor icon at the (left/right/top/bottom) border of the panel.

Command Panel

The Command Panel contains the command buttons of procedures or playlists. You can add command buttons by dragging and dropping a procedure node or a playlist node from the Solution Explorer into the panel.

Control Panel

The Command Panel contains the controls which can be bound with the procedure parameters, context variables and state variables to display their data. Please refer the section below for more information of adding controls and binding declarations to the controls.

HMI Panel

With the HMI panel, the screens will not appear in the separate windows but they can be bound to a HMI panel according to your layout. The HMI Panel can display your screens opened by the OpenScreen activities in run time. In design time, it displays the list of all the referred projects, each having a check box. You can tick one or many check boxes to bind the corresponding projects to the current HMI panel. The screens of the bound projects will be displayed in this panel.

Please note that you can not bind a project to many HMI panels i.e. it can only be bound to one HMI panel. To change the binding, you need to uncheck the old binding.


Controls are the elements inserted in the Control Panel to display the data of the declarations from the test sequences in various ways.

All controls have the following general settings:

General Setting Description
General -
Control.Channels Opens the Channel Collection editor to manage the declaration bindings to this control.
Control.Channels.General -
Control.Channels.General.DisplayName -
Control.Channels.General.DisplayName.TI Sets the text identifiers of the current binding for multi-languages.
Control.Channels.General.DisplayName.Value Sets the title of the current binding which is displayed at the top-left of that binding.
Control.Channels.General.Element -
Control.Channels.General.Element.Datatype Selects the data type of the declaration to be bound.
Control.Channels.General.Element.ElementType Selects the declaration type of the declaration to be bound by selecting in the combo box.
Control.Channels.General.Element.Index Sets the particular index of the item to be bound in a declaration of List data type ('-1' means you do not use index binding).
Control.Channels.General.Element.Name Selects the declaration to be bound. Please note that the 'Datatype' and the 'ElementType' must already be selected first.
Control.Channels.General.Element.Namespace Selects the namespace of the declaration to be bound (OtxPackageNames + ProcedureName).
Control.Channels.General.SnapInterval -
Control.Highlight Sets to specify the highlight color for some element(s) of the control. This property only applies for Text Box, Switch Button, Symbol (State Icon) and Table.
Control.Layout -
Control.Layout.Anchor -
Control.Layout.Anchor.Bottom Stretches the control to reach the bottom border of outer cell (True); otherwise, it has the minimum size (False).
Control.Layout.Anchor.Left Stretches the control to reach the left border of outer cell (True); otherwise, it has the minimum size (False).
Control.Layout.Anchor.Right Stretches the control to reach the right border of outer cell (True); otherwise, it has the minimum size (False).
Control.Layout.Anchor.Top Stretches the control to reach the top border of outer cell (True); otherwise, it has the minimum size (False).
Control.Layout.MinSize -
Control.Layout.MinSize.Height Sets the minimum height of the control in pixel.
Control.Layout.MinSize.Width Sets the minimum width of the control in pixel.
Control.Layout.Style -
Control.Layout.Style.Type Selects the type of the control outer cell. 'Absolute' means the outer cell has a certain size in pixel. 'Percent' means it has the size as much as the remaining space of the panel multiplying the percent value. 'AutoSize' means it has the size compatible with the minimum allowed size of the control.
Control.Layout.Style.Value Sets the value which used for the 'Absolute' type and 'Percent' type above.
Control.Layout.Visible Shows/hides the control (True/False).
Control.General -
Control.General.DisplayTitle -
Control.General.DisplayTitle.TI Sets the text identifiers of the current control for multi-languages.
Control.General.DisplayTitle.Value Sets the title of the current control which is displayed at the top-left of that control.


The text box control can be used to input and output character strings. The values of the bound parameters or variables are converted and displayed as a string.

Special Setting Description
TextAlign Sets the Horizontal text alignment to 'Auto' [Default] / 'Left' / 'Center' / 'Right'. 'Auto' means that the text is right aligned if the channel has a unit and left aligned if not.
FontSize Sets the font size for the text box. '0' means using the font setting of the current theme.
Multiline Allows to display the text in many lines (True) or in a single line (False).


The switch fits well to set Boolean values.

Special Setting Description
DisabledHighlight Sets the back ground color for 'OFF' to 'None' (uses the 'Window' color of the current theme) / 'Level1' (uses 'Highlight1') / 'Level2' (uses 'Highlight2') / 'Level3' (uses 'Highlight3').
OnValueText Specifies the substitute text for 'ON' text of the switch button.
OffValueText Specifies the substitute text for 'OFF' text of the switch button.


The ComboBox control is best suited for entering the value of the Enumeration data type. From a fixed list of values exactly one value can be selected. The ComboBox control has no special settings.


Several numerical values (Integer or Float) can be displayed as a pointer within the gauge. The first pointer (channel) becomes large, all others are displayed as small.

Special Setting Description
GaugeStyle Sets the gauge style to 'Circular' or 'Linear'.


The dial can be used to set exactly one numerical value (integer or float). The Knob control has no special settings.


Multiple numeric values (Integer or Float) can be recorded as data series within the diagram. Each data series gets its own color.

Special Setting Description
ChartStyle Sets the chart style to 'LinePlot' or 'LineArea'.


The symbol is bound to a Boolean parameter and represents a state.

Special Setting Description
DisabledHighlight Sets the disabled symbol color to 'None' (uses the 'Window' color of the current theme) / 'Level1' (uses 'Highlight1' color) / 'Level2' (uses 'Highlight2' color) / 'Level3' (uses 'Highlight3' color).
NumberOfBits Sets the number of the allowed icon bits in the control.
Icons -
Icons.IconBit(N) Sets the symbol for this icon bit (according to a symbol name in the current theme).
NameBits -
NameBit(N) Sets the name for the corresponding IconBit(N) which will be displayed under the IconBit(N) symbol.


The table control is best suited for displaying values inside of a list or map.

Special Setting Description
ParameterDatatype Selects the type of the Table control corresponding to the bound parameter. Note that there are only 3 supported types: 'ListOfList' (List of List of Simple Types), 'MapOfList' (Map of List of Simple Types) and 'ListForEachColumn' (List of Simple Types). If you bind a declaration of type not corresponding to the selected type of the Table control, the table content will not be displayed.
FirstRowIsHeader Takes the first row as the header of the Table control.
NumberOfColumns Registers the number of the customized column headers.
HeaderColumns -
HeaderTextComlumn(N) Specifies the customized header text for the column(N) if the column exists. In case there is no customized header text, it will use the default header text or use the first row value if the 'FirstRowIsHeader' property is 'True'.

Binding of Parameters, Context- and StateVariables to Controls

You can drag and drop a procedure parameter (or a context variable or a state variable) from the Solution Explorer into the panel to create a control which already bound with the dragged declaration. You can also drag and drop one of the declaration above over an existing control map to a new or an existing channel of the control.

NOTE: You can only bind the procedure parameters (or context variables or state variables) of some simple data types (Boolean, Integer, Float, String and user-defined EnumerationSignatureType) and the List/Map (with any child List/Map levels) of these simple types to the controls.