New Operator GUI Video Series!

We are releasing a new operator GUI video series on the OpenTAP Youtube channel!

In this new series, we are going to be building an Operator GUI which is a simple graphical interface for quickly running test plans and viewing verdicts.

This is a multipart series in which we will go through building the Operator GUI from start to finish.

What is an Operator GUI?

Operator GUIs are typically simple graphical interfaces that focus on running predefined test plans and viewing results. They are intended to be quick to use and minimize/prevent any editing of test plans.

Operator GUIs are useful when running test plans on high-volume production and manufacturing lines.
The simple interface provides the Operator with a quick way to run a predefined test plan on a device, classify it based on verdicts and move on to the next device!

How to Access it?

The source code of the Operator GUI will be made publicly available so that you can use it as is or as a starting point for building your own custom user interface.
Stay tuned for a link to the repository!


Cool! I know a lot of people have asked how to do this. It will be nice to have some more concrete examples. @craig.petku I know you were in the process of building your own UI, so this may be interesting for you to follow.

Already way past this. See my other posts on extending the Example GUI to include user input (dialog boxes). I have also added a method to read a button on the gui by the test sequence to allow an orderly shutdown and avoid an aborted status. Source for this has not been posted

Care to share some screenshots before you are ready to share source? :slight_smile:

1 Like

I have no issue sharing source code other than I do not have a project on a public repository. Posting snippets in messages seems awkward.

My basic issue was wanting to monitor 6 devices for an extended period of time. I had some very basic parameters to monitor for pass/fail criteria and others that were simply engineering data. The monitored parameters use a results listener in the simple GUI to watch for test step names when the test step completes then look at parameters to make decisions on what to post. The color of each box changes based upon if there was ever an inconclusive or error condition. The end test button works like a dialog box but simply returns the state of the button. This allows conditional flow control steps to take action based upon the button in the GUI. Very useful in for breaking out of a repeat (until/while) loop. The only downside is I haven’t figured out the same behavior in the Editor, so the step interogating the button has to be disabled. This leads one to learn about how to handle an input variable that is connected to a step that is disabled (checking for a null link in the test step). Still some minor clean-up to do, but this can be reasonbably quickly adapted to other test scenarios provided one learns how XAML works. The biggest setback is output variables are not available in parameters so test steps have to add extra controls.

My method of disabling syslogs by not initializing them may be questionable, but works…

All of this started with the SimpleOperatorGui project which Keysight pointed me to and is probably the basis of their video series. A significant piece of missing functionality in this example was lack of userInput. However I fixed that and posted the code for it so I’d expect they will include that in any future projects after it is cleaned up to standards.

Basically I learn to appreciate how little I know about windows programming as I explore how to implement features. I really don’t understand reflection (or care to) but it was necessary for implementing dialog boxes (including input boxes) in my version of the SimpleGUI…


Thanks Craig, appreciate the response and insight on your approach.

I’m really not sure about PAT’s so this may or may not be accessible


@craig.petku I’m able to access it. Really cool. @kaushik.santhanam check out this Operator UI.

1 Like

@craig.petku Looks very neat!
Thanks for the useful feedback in relation to your experience of using the existing work and OpenTAP SDK.

With the Operator GUI series, our aim is for it to be a quick and clean starting point for building custom GUIs such as your own. Each user has their own set of customizations to do, so we want to provide a really simple GUI with basic functionalities that almost everyone will need and then let them customize it according to their need.

1 Like

This simply shows an example of a multi-head UI and integrates several lessons learned from q&A on the forum including:

A results listener initialization that allows the CSV and SqlLite listeners to work concurently
User IO for dialogs
Accessing Parameters (and the ouput variable limitation)

These should be included in your discussion or implementation since if I ran into issues with these general concepts others could as well.


Here’s the 2nd video:


Definitely, in the last video, I will also be discussing how to use the OpenTAP sdk to add extensions to this UI to include results, duts, etc.!

1 Like

Checkout the third video here:


this is great, I am about to learn how to do this, so much more to learn.


Hi Vincent! Welcome to the OpenTAP community!

1 Like

Hi @kaushik.santhanam
Can you share the code for this example it would be a great help and allow me to hit the ground running.
I’ve tried the github link but its not a public repository @craig.petku can you re-share please ?

Many regards and thanks Andy

Hi @kaushik.santhanam

I’m building a custom GUI as per your You tube series.

As I can’t find the code anywhere and have a very limited experience with c# and MVVM (2 weeks and counting) I have 3 questions :slight_smile:

  1. How to get the output from the testrun to the “status window” of the GUI view. Ideally I would like the session log to be directed there for now.

  2. I select the Engine Test.TapPlan

Engine.UnitTests/TestTestPlan/EngineTest.TapPlan · master · OpenTAP / OpenTAP · GitLab

in the session log, I see the following type of Warning

2022-06-15 13:03:21.901035 ; Serializer ; Warning ; XML line 4 column 6: Unable to locate type ‘TapPlugin.BasicSteps.FixedCountLoop’. Are you missing a plugin?

Can I just add the related .dll for the above plugin to my project OR do I need to add the whole project to the solution ?

  1. does the TestPlanRun need to be run as ExecuteAsync or just as a plain exe ?
    i .e.


  •  TestPlanRun planRun = await _testPlan.ExecuteAsync(resultListeners, null, null, _cancelSource.Token);


// Execute the Test Plan.

  • TestPlanRun myTestPlanRun = _testPlan.Execute();

Look forward to hearing from you soon.

Many Thanks Andy