TestOptimal FAQ

Model runs but browser opens and closes immediately

Selenium requires that browser used for testing the AUT must have zoom set to 100%. Having browser not set at 100% when running model to test AUT will cause Selenium to abort. You can check if this is the case by looking at the Server log file and if you see the following error then you just need to reset your browser zoom back to 100%:

Error Unexpected error launching Internet Explorer. 
Browser zoom level was set to 107%. It should be set to 100%

On Internet Explorer, you can change the browser zoom level with browser menu “View / Zoom”.

Internet Explorer (IE) 9 Crashing when Opening Model

If you are experiencing IE9 browser crashing when you try to open a model. This is a known problem with IE9. There are certain settings in the internet options for IE9 that causes IE9 crashing. We are working to understand what settings or combinations of setting are causing the problem.

To get around this problem, do the reset operation as described below:

  • go to “Internet Options” under “Tools” menu
  • click on “Advanced”
  • click on “Reset” button
  • follow through to complete the reset operation
  • restart browser

Additionally you may try disabling add-ons you have installed as the crashing is often times caused by the add-ons and once the offending add-on is disabled or removed, you gain the stability back.

Debug and Trace

It's quite often that the failures (defects) only occur in certain conditions. Therefore just logging the failure and which state/transition the failure occurs is insufficient. Unless the defect can be reproduced, developer would not be able to fix it, nor can QA verify if the fix actually works. So, knowing how it got to the state/transition where failure occurs is an important part of the defect resolution.

mScript $trace('n') is created just for this purpose. It writes state/transition traversals leading to the current state/transition. If you place $trace('n') call in the mScript where the failure is detected, you would know exactly the exact path for reproducing the failure.

An alternative place to place $trace('n') is in onException or onError MScript triggers. This way, any failure or error will automatically trigger the call to $trace('n'). But be aware that this may generate large amount of trace if you have a lot of failures during the execution.

How to Fix No Solution Error

TestOptimal uses the proven mathematical model and optimization algorithms to generate the test sequences. It is required that all states are from the initial state. If this condition is not met, you will get the No Solution error when you try to execute the model. This is usually caused by missing transitions. This does not affect Random sequencers.

To fix this error, first you need to identify what states are not reachable and you can find this in the error message displayed or TestOptimal Server Log file.

Next, you can examine those states that are not reachable on the graph and you should be able to determine the transitions that are missing or need to be added to connect those un-reachable states.

Once you have identified the missing transition, add it to the model and try to execute the model again.

Assert Exception Levels

You can assign an exception level to each of the <assert> tag. When the assert failed, the failure message will be shown under the specific exception level on “Stats” tab page.

To assign the exception level to <assert>, just prefix the “else” message with the exception level followed by colon, see example below:

  <assert value1="$getText('firstName')" op="ne" value2="" else="L2: firstName missing value"/>

The above examples assigns exception level L2 to the failure message “firstName missing value”.

You can assing exception levels L1, L2, L3, L4, and L5. Please note only Enterprise Edition supports L1 - L5 while all other editions only supports L1, L2 and L3.

Exception level L1 is the default exception level. Many of the system generated exceptions are assigned L1.

Concatenate Strings

If you have to construct a string to be used as an input to some mScript methods, you can do so easily by just putting the pieces of the sub strings together. TestOptimal uses the token replacement technique, so you don't need to call any concatenate function.

The following example shows how to combine the first name and last name together in the format of “lastName, firstName” and print it to the mScript log file:

<log msg="$getText('lastName'), $getText('firstName')"/>

Why Some Selenium Functions Run Slower Than Other?

Selenium supports several ways to locate an element (object) on your web page.

You may find that it performs faster or slower when you switch the locator to find the same element on the page. What we've found is that using id= is the fastest way to find an element on the page. xpath= seems to perform reasonably fast.

But watch out for name= locator. We've found that using name= locator performs several times slower than other locator types. The reason is that there could be more than one elements with the same name and thus the driver must loops through all elements on the page to find all elements with the matching elements.

Why am I getting sporadic failure?

If you are getting sporadic failures on some of the transitions, this is probably due to the timing.

The reason is that Selenium tries to perform the action on an element before it is ready and all javascript loaded and executed. Most of the times this is caused by either slowness in the network traffic or the web server where your web app runs on.

The workaround is to slow down the testing by adding milliseconds delay to the model in “model” property if the sporadic faiulres occur on many difference transitions in the model, or by adding delay on the specific transitions in transition's property.

Not finding my java handler class and other java packages

Make sure your java .class file is loaded into TestOptimal/script/ folder. If you are using java packages, make sure .jar files are copied to TestOptimal/www/jar/ folder.

How to scroll a table in HTML page

Often times you need to scroll elements on the HTML page in order to interact with it. You can easily do so with a javascript:


where x is amount to scroll horizontally and y is amount to scroll vertically. Use positive number for scrolling down / right and negative number for scrolling up / left.

Alternatively you may use MScript function $sendKey() to send [KEYS.PAGE_UP] / [KEYS.PAGE_DOWN] keyboard event directly to the web page:


As a last resort you may use MScript function $sendKey() in WinUIA, JavaUIA and SikuliX (beta) plugins to send [KEYS.PAGE_UP] / [KEYS.PAGE_DOWN] keyboard action. Be aware that this approach requires that AUT page has the focus just like as if you physically press the keys.

Manual Test Case Report Lost Background Color for Test Case Status

This is a default print behavior on Windows print driver: not to print the background color.

You can change this behavior by checking the checkbox “Print Background (colors & images) as shown Windows Print Dialog.

Push models to all Runtime Servers

You can push models you have built to all Runtime Servers for execution controlled by your Continuous Integration testing.

Your Runtime Servers require float license and must be registered to SvrMgr.

  • In your ProMBT IDE, open the model and connect to SvrMgr server via menu File / Connect to SvrMgr.
  • In SvrMgr IDE, confirm model(s) you have deployed / checked in in ModelList tab.
  • In SvrMgr IDE, perform Sync Models operation via menu Server / Sync Models. Wait for confirmation that models have been pushed and synched with the Runtime Servers
  • Right-mouse click on a Runtime Server and select Open IDE to check that the model(s) are in the FileList tab.