# New Operator GUI Video Series!

**URL:** <https://forum.opentap.io/t/new-operator-gui-video-series/615>\
**Category:** General\
**Tags:** opentap-sdk\
**Created:** [February 15, 2022, 5:13pm UTC](https://forum.opentap.io/t/new-operator-gui-video-series/615 "2022-02-15T17:13:40Z")\
**Posts on this page:** 17\
**Page:** 1

<div class="post-metadata">

**Author:** ![kaushik.santhanam](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.opentap.io/kaushik.santhanam/32/208_2.png) [@kaushik.santhanam](https://forum.opentap.io/u/kaushik.santhanam)\
**Post date:** [February 15, 2022, 5:13pm UTC](https://forum.opentap.io/t/new-operator-gui-video-series/615/1 "2022-02-15T17:13:40Z")

</div>

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

[![](https://us1.discourse-cdn.com/flex020/uploads/opentap/original/1X/82e60a6a87c32de50da3e36fd8a21567a9aab5c3.jpeg "Operator GUI Series | Part 1 | Introduction") ](https://www.youtube.com/watch?v=dSCfEm8iga0)

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!

 ![OperatorUI](https://us1.discourse-cdn.com/flex020/uploads/opentap/original/1X/e111b22370f9b9d65c846521401fb9e10e7c5ba2.png)

---

<div class="post-metadata">

**Author:** ![brennen\_direnzo](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.opentap.io/brennen_direnzo/32/6_2.png) [@brennen\_direnzo](https://forum.opentap.io/u/brennen_direnzo)\
**Post date:** [February 16, 2022, 4:25am UTC](https://forum.opentap.io/t/new-operator-gui-video-series/615/2 "2022-02-16T04:25:26Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![craig.petku](https://avatars.discourse-cdn.com/v4/letter/c/8edcca/32.png) [@craig.petku](https://forum.opentap.io/u/craig.petku)\
**Post date:** [February 16, 2022, 3:11pm UTC](https://forum.opentap.io/t/new-operator-gui-video-series/615/3 "2022-02-16T15:11:09Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![mrjeffsmith](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.opentap.io/mrjeffsmith/32/309_2.png) [@mrjeffsmith](https://forum.opentap.io/u/mrjeffsmith)\
**Post date:** [February 16, 2022, 10:55pm UTC](https://forum.opentap.io/t/new-operator-gui-video-series/615/4 "2022-02-16T22:55:43Z")

</div>

Care to share some screenshots before you are ready to share source? 🙂

---

<div class="post-metadata">

**Author:** ![craig.petku](https://avatars.discourse-cdn.com/v4/letter/c/8edcca/32.png) [@craig.petku](https://forum.opentap.io/u/craig.petku)\
**Post date:** [February 17, 2022, 12:56am UTC](https://forum.opentap.io/t/new-operator-gui-video-series/615/5 "2022-02-17T00:56:27Z")

</div>

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.

 ![image](https://us1.discourse-cdn.com/flex020/uploads/opentap/original/1X/3da204c81823a4d851f4560468828b043c03ff2a.png)

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…

---

<div class="post-metadata">

**Author:** ![mrjeffsmith](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.opentap.io/mrjeffsmith/32/309_2.png) [@mrjeffsmith](https://forum.opentap.io/u/mrjeffsmith)\
**Post date:** [February 18, 2022, 8:26pm UTC](https://forum.opentap.io/t/new-operator-gui-video-series/615/6 "2022-02-18T20:26:01Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![craig.petku](https://avatars.discourse-cdn.com/v4/letter/c/8edcca/32.png) [@craig.petku](https://forum.opentap.io/u/craig.petku)\
**Post date:** [February 21, 2022, 3:52pm UTC](https://forum.opentap.io/t/new-operator-gui-video-series/615/7 "2022-02-21T15:52:27Z")

</div>

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

> **[OpenTapSimpleGui/RugbySimpleGui at master · cpetku/OpenTapSimpleGui](https://github.com/cpetku/OpenTapSimpleGui/tree/master/RugbySimpleGui)**
>
> master/RugbySimpleGui

---

<div class="post-metadata">

**Author:** ![brennen\_direnzo](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.opentap.io/brennen_direnzo/32/6_2.png) [@brennen\_direnzo](https://forum.opentap.io/u/brennen_direnzo)\
**Post date:** [February 22, 2022, 4:53pm UTC](https://forum.opentap.io/t/new-operator-gui-video-series/615/8 "2022-02-22T16:53:51Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![kaushik.santhanam](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.opentap.io/kaushik.santhanam/32/208_2.png) [@kaushik.santhanam](https://forum.opentap.io/u/kaushik.santhanam)\
**Post date:** [February 22, 2022, 5:25pm UTC](https://forum.opentap.io/t/new-operator-gui-video-series/615/9 "2022-02-22T17:25:04Z")

</div>

@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.

---

<div class="post-metadata">

**Author:** ![craig.petku](https://avatars.discourse-cdn.com/v4/letter/c/8edcca/32.png) [@craig.petku](https://forum.opentap.io/u/craig.petku)\
**Post date:** [February 22, 2022, 5:53pm UTC](https://forum.opentap.io/t/new-operator-gui-video-series/615/10 "2022-02-22T17:53:30Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![brennen\_direnzo](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.opentap.io/brennen_direnzo/32/6_2.png) [@brennen\_direnzo](https://forum.opentap.io/u/brennen_direnzo)\
**Post date:** [February 25, 2022, 3:22am UTC](https://forum.opentap.io/t/new-operator-gui-video-series/615/11 "2022-02-25T03:22:30Z")

</div>

Here’s the 2nd video:

[![](https://us1.discourse-cdn.com/flex020/uploads/opentap/original/1X/8aa9acfe3fed7753d3467e95bf6349b84c878d6c.jpeg "Operator GUI Series | Part 2 | Setting up the GUI") ](https://www.youtube.com/watch?v=NAVnfpzNdOc)

---

<div class="post-metadata">

**Author:** ![kaushik.santhanam](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.opentap.io/kaushik.santhanam/32/208_2.png) [@kaushik.santhanam](https://forum.opentap.io/u/kaushik.santhanam)\
**Post date:** [February 28, 2022, 3:16pm UTC](https://forum.opentap.io/t/new-operator-gui-video-series/615/12 "2022-02-28T15:16:39Z")

</div>

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.!

---

<div class="post-metadata">

**Author:** ![kaushik.santhanam](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.opentap.io/kaushik.santhanam/32/208_2.png) [@kaushik.santhanam](https://forum.opentap.io/u/kaushik.santhanam)\
**Post date:** [March 10, 2022, 8:59pm UTC](https://forum.opentap.io/t/new-operator-gui-video-series/615/13 "2022-03-10T20:59:59Z")

</div>

Checkout the third video here:

[![](https://us1.discourse-cdn.com/flex020/uploads/opentap/original/1X/65e3d4dc77bcd1f299307c5f73682038285b405b.jpeg "Operator GUI Series | Part 3 | Using the OpenTAP API") ](https://www.youtube.com/watch?v=IKe_8RYlWyE)

---

<div class="post-metadata">

**Author:** ![Vincent.Yu](https://avatars.discourse-cdn.com/v4/letter/v/bb73d2/32.png) [@Vincent.Yu](https://forum.opentap.io/u/Vincent.Yu)\
**Post date:** [March 11, 2022, 3:14am UTC](https://forum.opentap.io/t/new-operator-gui-video-series/615/14 "2022-03-11T03:14:26Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![kaushik.santhanam](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.opentap.io/kaushik.santhanam/32/208_2.png) [@kaushik.santhanam](https://forum.opentap.io/u/kaushik.santhanam)\
**Post date:** [March 11, 2022, 9:10pm UTC](https://forum.opentap.io/t/new-operator-gui-video-series/615/15 "2022-03-11T21:10:57Z")

</div>

Hi Vincent! Welcome to the OpenTAP community!

---

<div class="post-metadata">

**Author:** ![andy1](https://avatars.discourse-cdn.com/v4/letter/a/a8b319/32.png) [@andy1](https://forum.opentap.io/u/andy1)\
**Post date:** [June 9, 2022, 9:29am UTC](https://forum.opentap.io/t/new-operator-gui-video-series/615/16 "2022-06-09T09:29:32Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![andy1](https://avatars.discourse-cdn.com/v4/letter/a/a8b319/32.png) [@andy1](https://forum.opentap.io/u/andy1)\
**Post date:** [June 15, 2022, 12:51pm UTC](https://forum.opentap.io/t/new-operator-gui-video-series/615/17 "2022-06-15T12:51:30Z")

</div>

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 🙂

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](https://gitlab.com/OpenTAP/opentap/-/blob/master/Engine.UnitTests/TestTestPlan/EngineTest.TapPlan)

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.

> //Async.
> 
> - 
> 
> ```
> TestPlanRun planRun = await _testPlan.ExecuteAsync(resultListeners, null, null, _cancelSource.Token);
> 
> ```

OR

> // Execute the Test Plan.
> 
> - 
> 
> ```
> TestPlanRun myTestPlanRun = _testPlan.Execute();
> 
> ```

Look forward to hearing from you soon.

Many Thanks Andy
