Much like every site on the internet, we use cookies to help analyze traffic and improve our website. As outlined in our privacy policy, any information is only used internally and is not shared with outside organizations.
Learn More

The next release of Test Design Studio has literally been in development for many, many years. Even as other major versions were released, we have been prepping for an architectural shift in the core text editing experience and how we manage parsing files to provide best-in-class code analysis and intelligent code completion for VBScript.

Our singular goal for Test Design Studio has always been to provide the most advanced code-based IDE for developing VBScript-based tests for the Unified Functional Testing platform (UFT, formerly QuickTest Professional). From the beginning, QuickTest was marketed as a tool for users without development skills. The code view for tests was a basic feature, but not the focus of the tool and only briefly mentioned during sales presentations. The lack of commitment to code-based development was reflected in the limited capabilities of the text editor. This is exactly why Test Design Studio was created all those years ago. UFT has improved since Test Design Studio first introduced the automated testing community to the productivity that comes with a proper editing environment. UFT keeps changing names and ownership, but it has never crossed the boundaries into supporting enterprise-scale automation. With the next release of Test Design Studio, we solidify our position as the premium IDE experience for VBScript-based test automation and further separate ourselves from the default UFT experience. It is fitting that “Professional” was dropped from QuickTest Professional when the tool was renamed, but that’s why Test Design Studio exists… to put the “Professional” back in UFT.

The beta program for the new release is currently open to everyone and does not require a paid license. We hope you will join us in evaluating the beta and providing your critical feedback. By working with the software before release, you’ll not only be able to take advantage of all the great new functionality before everyone else, but your feedback at this early stage also allows us to guide the development in a direction that will better meet your needs. We realize you may be used to working with huge corporations that serve their stockholders before their end-users, so we invite you to experience what it is like to work with a user-centric organization whose primary goal is to improve your day-to-day job.

If you need a little arm-twisting, keep reading for a preview of what you can expect in the all-new Test Design Studio. When you’re ready to get started with the beta, please contact support to express your interest (Slack Channel preferred).

New Feature Spotlight

Now for the fun parts! The editing experience is what sets Test Design Studio apart from generic text editors and even Unified Functional Testing itself. Here are some of the features we’re excited to bring in the next release.

Dark Mode

No modern software release is complete without support for a dark theme, so of course we had to add it! Users can now choose between light or dark themes to meet their individual preferences, and we think dark mode is going to be very popular. We’ve used dark mode for all the screenshots in this article so you can get a feel for what is coming.

Dark Mode

Full disclosure, not all aspects of the user interface fully support dark mode yet and icons do not fully adjust between themes, but we will continue to refine support for the theme.

Options, Options, Options!

We have completely redesigned the user interface for the Options dialog to support responsive layouts. For the user, this means you can now resize the control as needed and the layout will respond to the new size. For us, it means adding new options to the dialog is very easy. So that’s exactly what we did! New options are popping up in several categories, and here’s a sample of a brand new category just for Advanced VBScript options.

VBScript Advanced Options

Automatic VBScript Code Formatting

No more inconsistent code formatting! We spend more time reading code that writing it, and poorly formatted code has a significant impact on the ability of others to read and understand the code. Test Design Studio now includes the ability to automatically format VBScript code. Since everyone has different formatting style preferences, we put you in control of the different options and scenarios that cause formatting to occur.

With automatic formatting, you no longer need to worry about format as you type. Let Test Design Studio automatically format your code when you press the ENTER key for a new line, paste code from the clipboard, or type the end of a code block (e.g. End If). You can easily format an entire document at any time.

The screen below demonstrates different options available for formatting. Watch the text preview area at the bottom as each setting is turned on/off to demonstrate how the setting impacts code formatting.

VBScript Formatting Options

Redesigned Text Parsing Engine

This isn’t a flashy new feature and you may never even know it’s there, but this is the soul of the IDE. All files must be parsed to determine the code elements you define, and the new engine is at least 25% faster than the old engine. Perhaps more important than individual parsing speed, support for advanced multi-threaded scenarios means multiple operations can be processing on the same document at the same time when they used to be queued up one after the other.

Did you know that every time you edit a document you are potentially invalidating the context of every other file in your project? That’s a lot to process with every keystroke, so the new parsing engine means that when you edit a document, the impact of your changes is reflected faster in the IDE than ever before.

Code Analysis Improvements

One of the marquee features of Test Design Studio is the real-time error analysis. The new parsing engine allows for errors to be processed faster than ever before! Even when working in complex projects with 100’s of files, you will find the editing experience responsive and the error list consistently updated with your changes.

When working with XML documentation comments, we’ve made a few tweaks. First, incorrectly formatted XML now shows up as a warning instead of an error. We made this change since XML formatting errors will only impact how Test Design Studio understands your code but will not prevent your code from executing. You will also find the XML issues are better represented in the editor. Previously, a small squiggle line was placed at the position of the error, but now the squiggle will be extended to include more of the text that is relevant for that position. For code analysis rules related to missing information in XML comments (e.g. public function without a summary), we changed the severity of those messages from “Warning” to “Information”. Especially for new users, we have observed that too many warnings related to missing XML data could distract the user from seeing more important warnings about code quality.

While we have reduced the visibility and message level, it is still important to understand that properly formatted XML comments are what help light up the extended functionality of Test Design Studio. We hope this change will help you make the most of those comments and correct issues when they arise.

Brand New Text Editor Control

Paired with the new parsing engine is an entirely new editor control. On the surface, the editor will look about the same as we’ve worked hard to bring forward all the functionality you love today. It’s what this editor allows us to do that makes all the difference! As you start to use it, you’ll even realize a lot of subtle tweaks have greatly improved and modernized the editing experience. Below are some highlights of new capabilities powered by the updated editor control.

Completion List Improvements

The completion list shown to auto-complete code has seen several improvements. As you type, the list will be filtered to only show items that match the text you have typed. Most importantly, matches no longer have to happen at the beginning of the completion item!

The list will match anything you type no matter where it appears, with the “best matched” item automatically selected. The matching text doesn’t have to be contiguous, either, so long as the individual characters appear somewhere in the same order in which they were typed. Match priority is first given to text that starts at the beginning and then to upper-case characters used by PascalCase and camelCase naming conventions. The following sample shows how mbox was used to match on MsgBox and the related constants.

You also have the ability to control which items are displayed in the list. Use the filter buttons at the bottom of the completion list to toggle which items are displayed.

Completion List

Code Match Highlighting

The ability to highlight code relevant to the current caret position or selection is one of the most visible new editor features, and you’ll find it implemented in a few different ways.

Identifier Matching

We think this one will make everyone’s favorite new feature list! Any time you place the caret over an identifier (e.g. function name, variable name, parameter name), all other instances of that same identifier are highlighted in the editor. It does not simply match on text but makes sure the text refers to the same item. This makes it easy to glance at your code and see the other places an identifier is being used.

Identifier Highlights

Selection Matching

If you do want a simple text-based highlight, select any range of text and other instance of that same text will be highlighted as well.

Selection Highlights

Token Pair Matching

Several code blocks in VBScript have opening and closing token pairs: If…End If, Function…End Function, Class…End Class. You can even have blocks of the same token pairs nested inside each other. Indenting code helps identify matching pairs, but it can still be difficult to follow, especially if you must scroll the view to find the match. Any time the caret is positioned over an opening or closing token pair, the matching tokens will be highlighted. This means if the caret is positioned over a Function declaration, the corresponding End Function will be highlighted.

For more complicated code blocks like Select…Case…End Select, the Case tokens will also be highlighted. The same concept is applied to If…Else…End If blocks.

Token Pair Matching

Incremental Search Results

Incremental search is one of those features that can change your life! If you aren’t using it yet, it only takes a moment to learn. Pressing CTRL+I activates Incremental Search mode and then every character you type after that is combined into a search term where the caret moves to the first match. Pressing CTRL+I or CTRL+SHIFT+I while the search mode is active will move selection forward and backward through all the matches. Press ESC when you’re done to go back to editing.

New in this release, all matching text will be highlighted as you type so you have greater visibility into the text you’ve typed and the matches you will find as you cycle through. The screen below shows what happens when Incremental Search is activated and then the characters A R R are typed. Each typed letter expands the search term and updates the highlighted matches. Then CTRL+I is used to move selection forward through the matches before using CTRL+SHIFT+I to return to the original position where ESC is pressed to return to normal editing.

Incremental Search

Multiple Carets

If you find you need to type the same text in a document in multiple locations, you can now insert multiple carets. Hold the CTRL key and click in the document to insert an additional caret at that location (or remove a caret that was already there). Add as many as you want. Every character you type will be repeated at each caret location. Backspace, caret movement, and other basic editing commands are also supported. For fast use with the keyboard, pressing ALT+SHIFT+DOWN will automatically insert a new caret below the current caret, and you can repeat the command to extend carets over as many lines as needed. This is especially useful when the text you want to edit is vertically aligned and you want to perform the same edit on each line.

Multiple Carets

Automatic Delimiter Completion

Certain characters in code are always entered in pairs where one character starts a sequence and another character ends it. When you type one of these characters, the completing character is automatically inserted after the caret. If you accidentally type the character anyway out of habit, the editor won’t insert the extra character but will advance the caret position after the closing character so you can continue typing normally.

Delimiter Completion

Outlining Improvements

Outlined regions have an improved visual appearance and interactive highlights of the corresponding region when hovering over the outlined nodes. XML Documentation comments have also improved the text displayed when comments are collapsed to always show the summary when defined, even if it is not the first line. Otherwise the first line of comment text will be displayed.



Each editor now supports an individual zoom setting. If you need to make text bigger or smaller, you can simply adjust the zoom level and not worry about changing font size. This is especially useful when presenting or collaborating with a colleague that may not be sitting close enough to the monitor to easily read the code.

All standard zoom gestures are supported, including CTRL+MouseWheel. There’s also a drop-down at the bottom-left of the editor where you can easily set the zoom level to a predefined list of common values.


Move Selected Lines Commands

So simple in concept, but so handy for moving code! The selected lines will be moved up ALT+UP or down ALT+DOWN in the editor. If there is no selection, the line where the caret is positioned is moved. Using these commands allow you to avoid cut & paste just to move a line and, as a result, allow you to move code without impacting the contents of your clipboard.

Move Lines

Expand/Contract Selection Commands

These commands allow you select the range of text based on logical blocks. If the caret is positioned inside an If statement, pressing CTRL+SHIFT+NumPadPlus will expand to include the entire statement. Expand again and selection might include an enclosing function declaration or class declaration. Every time you expand, the selection is moved out one block. The contract command CTRL+SHIFT+NumPadPlus works in reverse and will reduce the selection by one block.

Expand Selection

No Need to Wait… Get Started Now!

You don’t have to wait for the official release to enjoy these great new features. Join the beta program and you can experience the future of Test Design Studio today! Please contact support to express your interest (Slack Channel preferred), and we’ll let you know how to get started.

DRY – Don’t Repeat Yourself (Continued)

With AutoBloks 19.4, we kicked off the “DRY – Don’t Repeat Yourself” initiative with reusable user activities.  We have now extended that concept to element identification with UI Repositories.

UI Repositories

A UI Repository is a collection of Element Definitions which dictate how to identify an element.


As shown above, you can use categories to logically organize your elements.

Using Shared Element Definitions

Each UI repository is completely independent and can be referenced by multiple Processes or User Activities.  You can add as many UI Repositories as you need.


When creating your Activity Calls that work with elements, you will now have the option to locally define your elements as before or select your element from a UI Repository.


Also new in 19.5.1

While the focus was on UI Repositories, a few other enhancements have also been baked in to this release.

Search in Output Window

The Output Window can show output information about the general Run or detailed information about the Element Identification process during the run.  As the amount of information being output grows, the harder it becomes to find what you need.  By pressing CTRL+F, you can open a pane that will allow you to search within the output window.


Properties on Document Tab Context Menu

Sometimes it is the little things that add up to big usability improvements.  To make it easier to manage references to Activity Libraries and UI Repositories, the “Properties” command has been added to the context menu of the document tab for supported file types.


Full Change Log

The following is the complete change log of relevant updates for this release

  • NEW: Shared UI Repository support to organize element definitions and promote reuse
  • NEW: The Start Page has a single “New File” command with a popup for creating new instances of all supported file types now that there are too many files types for each one to have an individual button.
  • NEW: When saving a file with an extension that does not match the file type, the user will be prompted to confirm the extension.
  • NEW: Document Tab context menu for Process and Activity Library now includes a “Properties” command to easily open the properties window for that file.
  • NEW: The Error List tool window will now show the file extensions in the “File Name” column to help distinguish between different file types of the same base name.
  • NEW: Shipping WebDriver updated to latest for Chrome and Internet Explorer
  • NEW: Use “CTRL+F” in the Output tool window to easily search output.
  • CHANGED: When any error is encountered while opening a file in the Recent Files list, you will be prompted if you want to remove it from the recent list.  Previously the user was only prompted if the file was not found.
  • FIXED: Improved error handling when running a process and a web-based activity is encountered before a web browser is opened.
  • FIXED: The Element Picker was not honoring the application setting about case-sensitivity when manually adding new property conditions to an element

DRY – Don’t Repeat Yourself

Those who develop software have likely heard of the DRY principle which stands for “don’t repeat yourself”.  As tempting as it is to copy and paste working solutions, those solutions may not work forever.  If/when you ever need to change a solution, you’d have to find all the copies and repeat your updates.  That, of course, assumes you can find all the copies!

We have known from the beginning that AutoBloks needed to support reusability, and today that finally becomes a reality with User Activities!

User Activities

User Activities are defined by you and include calls to built-in activities or even other user activities.


The above example shows a User Activity to login to an application.  An Activity Library is used to logically organize your activities in a single file, and the drop-down at the top of the editor allows you to switch between activities.  When loaded, the user-defined activities appear side-by-side with the built-in activities.  You have full control over the input/output arguments, description, and category.

It’s no coincidence that we use “Login” in the above example as this is one of the most commonly repeated set of activities you may encounter when automating an authenticated application.  It just takes 4 activities to open and authenticate to the application but imagine repeating those over and over for every process you create.  Even worse, imagine if the login routine changed and you had all those processes to update!  If you create a User Activity for these kinds of common application scenarios, your processes will be easier to maintain and easier to read.

User Activities in a Process

The following is a sample Process designed to verify the login functionality of a website.  This Process will be data-driven by a Scenario and expects key pieces of information to be passed as Input Parameters.  Specifically, it accepts a “UserName”, “Password”, and “ExpectedErrorMessage” which, when populated, indicates that login should fail with the given error.


The sample Process above uses the “Login (No Defaults)” User Activity as well as other User Activities specifically created for this application.  The “Is login page displayed” activity was created to easily test if the Login page is present.  The “Verify login page displayed” takes advantage of the “Is login page displayed” activity and will use the result to write a Pass or Fail message to the results.  Finally, the “Get login error message” user activity was created to read any displayed error message after an unsuccessful login.

One key aspect of this sample Process is that none of the activities shown have to interact with any UI elements of the application.  This is important since UI elements change all the time.  The “Get login error message” activity is the only place where the UI is defined for which element displays an error message.  If the UI ever changes, I only have to update the one activity and all of my processes will continue to work!

Data-Driving a Process with Scenarios

The “VerifyLogin” process above was designed to have data passed to it.  This is where Scenarios are used.


The “ValidateUserCredentials” scenario above utilizes the “VerifyLogin” process shown before.  Each time it is called, different combinations of data are passed for the credentials and expected error message for invalid logins.

With Scenarios, Processes, and now User Activities, you have more opportunities than ever to stay DRY… don’t repeat yourself!

Also New in 19.4.1

User Activities are the highlight of this release, but it’s not the only new feature.

File Tools

When a Scenario, Process, or Activity Library is selected, a new File Tools contextual tab will display on the Command Ribbon.


As shown in the above screen shot, the Process and Activity Library tabs will include commands to more easily insert calls to activities.  The “Insert Comment” and “Insert Report Message” commands are always available for those frequently used activities.  The “Insert” command is a drop-down that will let you pick from a categorized list of all available activities.  Finally, all activities pinned as favorites will be displayed in the gallery for one-click access.

Searching for Element Status Improvements

When automating a user interface, a lot of time is can be spent searching for elements.  When those elements are missing, the user is often left wondering what is happening in the application.  AutoBloks has always had an animated icon in the status bar when it was busy searching, but it was easy to overlook.  This release dials up the information in the status bar.


In addition to the icon, you’ll also see “Searching for Element”.  If a nickname has been provided, the element will be referred to by nickname as shown in the screenshot above.  All search operations have a timeout before giving up, and the remaining time will count down to let you know why it is waiting.  If you know the element will never show up, you can click the “Cancel” link to immediately force the search to timeout and continue.

Full Change Log

The following is the complete change log for this release

  • NEW: Activity libraries to define your own reusable activities
  • NEW: The ability to "Enabled/Disable" a Process or Activity call is now available on the Options tab of the call instructions. Previously was only available in context menu.
  • NEW: The "Run" command will now be enabled if you have a Process or Scenario open that is not the selected document if that is the only Process or Scenario open. This reduces the need to select the only available item before the command is enabled.
  • NEW: Added new "UI Elements" category on the options dialog that includes an option to determine if the Element Picker defaults to case-sensitive or case-insensitive when generating property conditions to identify an element.
  • NEW: “Get mouse location” activity added to determine the x/y coordinate of the mouse
  • NEW: Contextual ribbon tabs added for Scenario, Process, and Activity Library. Process and Activity Library feature several convenient buttons for inserting new activity calls from favorites or picking from a list.
  • NEW: Activity call list now has an "Insert activity" menu on the context menu so you can easily insert a new activity without having to find it in the Activities tool window.
  • NEW: When deleting an activity call with children, a secondary warning prompt will be displayed to confirm that the children will be deleted as well.
  • NEW: The "Highlight Element" command has a drop-down menu to allow you to configuration the duration of the highlight. The default has been set at 1 second. New Run option also allows you to control the duration of element highlights during playback.
  • NEW: While searching for elements, the status bar will indicate the time remaining before timeout as well as an option to cancel the search.
  • CHANGED: The report now uses read-only textbox controls to display message, input arguments, output arguments, and variable values. Long text will be limited to fixed number of lines before scrollbars are used. An added benefit is you can now select and copy text from each field as well as better inspect the contents for white space characters.
  • CHANGED: Moved "Set variable" activity to the "Data" category.
  • CHANGED: Named formats for working with date/time patterns updated.
  • FIXED: Dragging and dropping a loop activity within itself or its children would cause the activities to disappear. That operation is now properly blocked.
  • FIXED: The "Highlight Element" command might not identify an element if the multi-match policy was set to a discovery or screen position greater than 1.
  • FIXED: The "Highlight Element" command will be disabled while actively executing (unless paused)
  • FIXED: Results might display the "These are temporary results" banner in instances where the results are not temporary.
  • FIXED: When dragging/dropping multiple activity calls to a child block of a loop that was empty, the first dragged call would appear at the bottom after the drop.
  • FIXED: Capturing an element screenshot on certain web pages might produce an "OutOfMemoryException" or incorrect cropping of the element.
  • FIXED: Highlighting an image-based element that used a relative file path might not find the image file.
  • FIXED: Several improvements to memory usage and optimization

Activities, Activities, Activities!

A library of built-in activities are essential to a strong “no code” automation tool, and this release delivers 36 new activities in key areas that enable brand new automation scenarios.

The full list of new activities is below.  The new Flow Control activities include 3 loops designed to repeat actions for common scenarios where traditional programming might use a “for” loop.  With this update, AutoBloks now supports “if/then/else”, “while”, and “for” programming concepts.  The new “Text” category provides a wealth of opportunity for analyzing or manipulating any text, while the “Data” category has been expanded with several new activities related to work with date/time values.

File System

  • Overwrite text in file - which will overwrite the current file text with new text.
  • Read text from file - which can read individual lines, ranges of lines, or all text.
  • Count lines in file - to output the total number of lines in a file.
  • Find and replace text in file - to perform text replacement directly in a file.
  • Find and replace pattern in file - to perform regex-based text replacement directly in a file.


  • Read random line from file - to help randomize data by pulling in a value from a file of seed values (e.g. first names, last names, phone numbers)
  • Random date of birth - to generate a date that will result in an age within the range given
  • Format date/time - to convert any date string into another format
  • Extract date parts - to break any date down into parts like month, day, year, milliseconds, day of the week
  • Adjust date/time - to add/subtract years, months, days, hours, minutes, seconds to/from a date.
  • Create date/time - to define a new date from individual year, month, day, hour, minute, second


  • Count characters - to count the number of characters in text
  • Make lowercase - to convert text to lowercase
  • Make uppercase - to convert text to uppercase
  • Trim white space - to remove leading/trailing white space and/or collapse repeated white space
  • Pad text - to add additional characters before and/or after text until it is a certain length
  • First characters - to return the first number of characters in text
  • Last characters - to return the last number of characters in text
  • Repeat text - to create a new text value by repeating a smaller value until the desired length is met
  • Extract text - to return a subset of text from a larger text value
  • Insert text - to insert a new text value into another text value
  • Join text - to combine multiple text values until a single value with optional separator between
  • Find text - to find explicit text in a larger text value
  • Find pattern - to match regular expression pattern against larger text value
  • Replace text - to replace all matches of explicit text with new value
  • Replace pattern - to replaces all matches of regular expression pattern with new value
  • Count separated values - to count the number of entries in a delimited list of values (CSV supported)
  • Get separated value - to return the value at a certain position in a delimited list of values (CSV supported)
  • Set separated value - to set the value at a certain position in a delimited list of values (CSV supported)
  • Find separated value – to find the position of a value in a delimited list of values (CSV supported)

Flow Control

  • For each separated value - allows you to loop over every entry in a list of separated values (e.g. “One,Two,Three”, or “One;Two;Three”) with full support for CSV formatting.
  • Counted repeat - for a simple loop that executes a set number of times.  Easier to configure than using a "Conditional repeat" loop.
  • Stepping repeat - to step from a start value to an end value while running the loop for every value encountered along the way.


  • Wait for property value to stabilize - can be used to make sure an element is not changing (e.g. moving on the screen or text updating).
  • Wait for expression value to stabilize - can evaluate any supported expression and wait for it to stop changing.

Element Interaction

  • Count Elements - to count how many elements match a given identification.


  • Updates to Verify expression and Verify property value allow you to optionally define a custom message to appear in the report instead of the auto-generated one.

Sample Scenarios Now Supported

All these new activities enable new scenarios that weren’t possible before.  Same examples of what you can do now include:

Random data

Good testing often involves randomizing the data used for input.  AutoBloks already supported “Random characters” and “Random number” to help with some data randomization, but you now have even more powerful capabilities.  The “Random date of birth” activity allows you to specify an age range you want, and then the activity will randomly generate a date of birth within the given range.  You can combine the “Random number” and “Create date/time” activities to generate random dates.

For any other random data, the new “Random line from file” activity has you covered.  Your application may want to randomize names of people, but you don’t want to use real names.  Simply create a file with as many real names as you want, and then use “Random line from file” to randomize the name.  If you do the same for both first and last names, you will be generating a highly randomized user every time.  The same concept could be used for anything else you need to randomize!  Just create as many entries in the file as you need and then randomly pull a value from the file.

Data drive your automation with CSV files

Comma-separated values (CSV) is a common format used to represent rows of data in plain text and is fully support by Microsoft Excel.  Several new activities in this release will allow you to data-drive your process.  The following illustrate how you would build activities to read a sample file with two columns of data in CSV format where Column 1 is “User Name” and Column 2 is “Password”.


  1. Create a variable called “{DataFile}” and set the default value to match the path of your data file.
  2. Add the “File System \ Count lines in a file” activity.  Set the “File” input argument to use the “{DataFile}” variable.  Map the “LineCount” output argument to a new variable called “{LineCount}”
  3. Add the “Flow Control \ Stepping repeat” activity to your process.  This activity will be used to loop over each line in the file that defines data.  Set the “StartValue” input argument to 1 to start at the beginning of the file, or 2 if the first line of the file contains header data.  Set the “EndValue” input argument to the variable “{LineCount}” that was established in Step 2.  Finally, map the “CurrentValue” output argument to a new variable called “{LineNumber}” so you can track which line of the file you are on.
  4. The following activities will be added inside the “Stepping repeat” loop:
    1. Read the current line by adding the “File System \ Read text from a file” activity.  Set the “File” input argument to use the same “{DataFile}” variable from prior steps. Set the “StartLineNumber” variable to “{LineNumer}” so that it reads the current line. Set “MaximumLinesToRead” to 1 to only return the single line.  Map the “Text” output argument to a new variable called “{LineValues}”.  This variable will hold the comma-separated values for the current line.
    2. Add the “Text \ Get separated value” activity to read the value from column 1.  Set the “Values” input argument as the variable “{LineValues}”.  Set the “Separator” input argument to “CSV”.  Set the “Position” input argument to 1 for the first column.  Map the “Value” output argument to a new variable called “{UserName}”.
    3. Repeat the last step to add a similar activity for the “Password” column.  Except this time set the “Position” input argument to 2 for the second column and map the “Value” output argument to a new variable called “{Password}”.
    4. TIP: You could also create variables called “{UserNamePosition}” and “{PasswordPosition}” that are given default values of 1 and 2 to make it easy to update your process later if the column positions change.  If your CSV file contained a header row, you could also use the “Find separated value” activity to automatically determine the position of each value.

Next you simply add the activities that you want to have repeated with the loop and can use the “{UserName}” and “{Password}” variables for the current row’s data.  We have plans to create a special activity specifically for looping over a data set, but the above set of activities make CSV parsing available today.

Jump to Source from Reports

When reviewing the results of a run, you can now easily jump to the source that generated the entry in the report.  Simply right-click and select “Go To Location”.  You can also double-click the entry if it does not have children (where double-click would toggle expansion state instead).


Note that if you open a report generated on older versions of the software, you may not be able to navigate to all location types as the necessary tracking information was not part of the old report.

Integer Data Entry and Validation

Many parameters take simple integer values, and those values are often limited to a range of numbers.  The month of a year, for example, is a value from 1 to 12.  Where applicable, range-based numeric values will now verify your data matches the range and generate errors in the Error List when necessary.  The following example from the “Create date/time” activity shows spinners on integer-based fields and a validation failure when hour is set to “24” since the expected range is “0 – 23”.


New System Variables

The following new system variables have been added and can be used when defining argument values:

  • {EmptyText} – This system variable is just an empty value with no text.  When an activity has a required argument and you intend for the value to be explicitly empty, you can pass the {EmptyText} expression to avoid the error about leaving the required argument empty.
  • {Tab} – This variable represents the tab character that cannot be typed as an argument value.
  • {CarriageReturn} and {LineFeed} – These variables represent the characters used in files to mark the end of a line.  Every operating system is a little different with how it handles the default line terminator.
  • {NewLine} – Since every operating system uses “Carriage return” and “Line feed” characters differently, this variable will always represent the default for the current operating system.  On Windows, that is a combination of “Carriage return” followed by “Line feed” (aka “CrLf” or “\r\n”).

This release started with a simple goal to implement scenario support, but the journey brought many other features and enhancements along with it that properly enable the scenario feature to shine.

Introducing Scenarios

We’ll start by introducing the big new feature… scenarios.  Until now, the only way to execute your automated process was to open each Process individually and run it.  With a scenario, you can now group multiple processes into a single scenario and run them all!  Just like how you can call activities from a process, your scenario allows you to call processes.  Perhaps most importantly, you can configure how the process will execute.  Let’s take a look!


The above screen shot shows an example scenario.  The UI layout is very similar to a process where you have a list of calls at the top and the instructions for the call detailed on various tabs at the bottom.  In this example, the same “CaptureWebPage” process is being called five times, but each call is different.  This purpose of the “CaptureWebPage” process is to open a URL and capture the screen shot of the resulting page.  By using a scenario, I am able to reuse the same process to capture screen shots for any URL, set the browser width, and control which web browser is used.  In the first three process calls, I visit the same URL but change between three different browsers (see the “Options” column in the call list and more about browser control listed below).

Just like a process, you can create variables to store dynamic data.  In the last two process calls, I used a scenario variable to define the URL to be captured and included a non-default argument for “BrowserWidth” (see the “Input” column in the call list to see which values are being passed).  It is worth noting that scenario values are not visible to the process.  You must explicitly pass values from the scenario to the process through parameters.  This decision was very intentional to allow a process to continue to be a self-contained set of instructions.

Exposing parameters to a process is very easy and utilizes process variables.


Above is the standard view for the Variables tool window with a process variable selected.  The “Parameter Details” section at the bottom is only available on process variables and can be toggled to show/hide the information.  By checking the “Allow values to be passed as Input Parameter”, the default value of the variable can be assigned through an Input Parameter.  The default value and description you provide for your parameter will also be visible on the Arguments tab of the process call, so you will always be well-informed about the data you can provide.  Input parameters can optionally be marked as required, and doing so will generate an error in the Error List if the user calls the process without providing the input parameter.  The final value of a variable can even be exposed as an output parameter to allow a value from one process call to be used as input in a later process call.

Some other highlights of scenarios…

  • You can disable an individual process call if you need to stop it from running in your scenario
  • You can run one or more individual processes by selecting only the process calls you want to run and using the “Run Selection” command on the context menu.
  • An error or warning icon will display in the process call list if there are any issues with the process you want to call

Error Handling and Execution Status

We have greatly expanded the error handling capabilities in this release.  There is now a global setting (under Options –> Run) that defines the default error response for when there is an issue executing an activity.  By default, the user will be prompted as before.  When calling a process or an activity, you can choose to override the default setting with an explicit response instead.  In addition to the prior response, two new general responses have been added to “continue as warning” or “continue as ignored”.  Both options allow execution to attempt to continue but will change the result of the activity call to either a “warning” or a general “ignored” status.

When running a scenario or process, the status of the last executed item will appear in the view.


Above is the result of a scenario run (two documents docked side-by-side).  On the left is the standard scenario editor where the status of each executed process is clearly displayed in the margin.  On the right is the detailed results view that has been expanded to support scenarios.  All the activities from each process are aggregated together to produce the summary information at the top and you can drill down into individual processes to see the activity details from that process.

In the scenario editor of the above screen shot, note how the non-default “OnError” settings for two process calls are displayed in the options column.  The “RunTimeError” process is specifically designed with an activity that will generate an error, but the “OnError” setting changed the status from “Error” to either “Warning” or “Ignored”.

Status indicators are also visible for individual activities in a process.


The screen shot above shows several activities that were successfully executed, but the selected activity in the conditional block was never executed.  Since conditional blocks and loops may not always be executed, these visual indicators allow you to quickly see which activities were executed.  In this case, I know that my condition was not met, and I might need to research if that was the desired result.

Finally, the user prompt for when an error is encountered has been expanded to support the new options.


The “Retry” option has not changed and will continue to allow you to repeat an activity call.  The previous “Continue” option has been replaced with three individual options dictating the Error, Warning, or Ignored status to be assigned before continuing.  The “Fail Process” response is only shown when executing a scenario.  That option will fail the current process while continuing to the next process in the scenario.  The “Stop Execution” option remains unchanged and will abort any further executions, but a new “Stopped” status has been added to the results to indicate that a process was stopped before it was completed.

Browser Control

Until now, the only way to control which web browser was used during playback was to change the default browser for the application.  This complicated multi-browser testing or automating processes on a site that expected a certain browser.  You now have two ways control the browser that is used for a process.

First, the “Launch browser” activity has been expanded to support “Browser” as an argument.  If not populated, the default browser will still be used, but you can now indicate either “Chrome”, “Firefox” or “Internet Explorer” as the browser.  Like all arguments, this can be replaced by a parameter to vary the browser.

Second, a process call in a scenario can change the default browser for a process.  This is defined on the Options tab for the process call instructions as shown below:


In the screen shot above, the default browser has been explicitly set as “Internet Explorer”.  Unless the process uses the “Launch browser” activity with a non-default browser, the process will execute in the “Internet Explorer” browser even if the application default is set to something else.  The “Browser” option also supports expression syntax, so the hard-coded value could be replaced by a scenario or environment variable.

And More…

The following updates and enhancements were also included in this release

  1. A new “Report message” activity (in the Other category) that can write any message, status, and optional image to the results.
  2. Activity calls that are not enabled will be excluded from rule analysis
  3. A new “Home” tab on the back-stage menu combines the “New” and “Recent Files” lists into a single location.
  4. A new “Run” option added to control if page source is output after element identification issues.  This was previously always enabled and is now off by default.
  5. Using the “Open containing folder” command will now select the corresponding file in the folder after it is opened.
  6. A process can be reloaded without closing and reopening it.
  7. When navigating to the source of an error, the document will be opened in “preview” mode if not already opened.  Preview documents are temporary and automatically closed the next time a preview document is opened, so this can prevent opening too many files by accident.  As always, pin the preview document to keep it open.
  8. Lots of performance improvements and fixes

While creating or debugging a Process, you typically run it multiple times to verify proper playback.  If you also have the “Open Results After Run” option enabled, the document area can quickly become cluttered with too many open results.  Most users typically don’t care about keeping these development results around for longer than a single run, but it is easy to forgot to close the results before the next run.  You can always turn off “Open Results After Run”, but then you might miss important details.

Thinking about this scenario, the ideal solution is to open the results after each run, but automatically replace those with new results on the next run.  This is exactly what Preview Results enables.

When enabled, any results after a run are opened in Preview Mode and will appear as a special tab on the right of the document tab area as shown below:


The document tab is a different color from non-preview documents and contains a special “Keep Open” button on the tab.


If you want to keep the results open, clicking the “Keep Open” button will exit Preview Mode and the results will stay open until you close them.  If you leave the results in Preview Mode and run a process again, the prior Preview Results will be automatically closed and replaced with the new results.

The Preview Results feature allows you to keep your document area clear of unwanted results while giving you full control to retain the results you need.

This setting is on by default, but can always be disabled under “Options –> Run” by clearing the “Use preview mode” setting under “Open results after run”.


We continue to iterate quickly on bringing new functionality to AutoBloks, and the latest release (19.1.1) adds two important new features… environment variables and “on error” playback control for when an activity call encounters an error.

Environment Variables

One of the more important aspects of a successful automation strategy is to separate your data from the steps you perform.  With AutoBloks, you accomplish this through the use of variables.  Until now, all user-defined variables had to be defined on a per-process basis.  If you have several related processes that all need the same data, this could result in unnecessary duplication of variables across those process and, most importantly, introduce a high degree of maintenance if the value of a variable needed to change.  Environment variables are here to specifically address this scenario!

Environment variables are defined in XML-formatted data files.  Each file represents a single variable repository, and you can instruct AutoBloks to load one or more of those repositories.  Once loaded, the variables defined within each repository will be available to all of the processes you execute.

The following screen shot shows how easy it is to define your own environment variables.  In this example, you can see a basic XML document which defines a single variable called “PattersonConsultingUrl”.  The Options dialog of AutoBloks is used to add this file as a variable repository.  Once added, the Variables tool window will include this repository and defined variables under the “Environment Variables” category.  This new variable is now access to you just like all the other built-in and user-defined variables.


Tip: This file format is intentionally the same as the file format used by Micro Focus Unified Functional Testing, so you can easily share your data between the tools.

While not shown above, you can also define a “Category” property for your variables to better organize large repositories of data.  For more information on using variables, refer to the AutoBloks On-line Documentation.

On Error Playback Option

No matter how hard we try to avoid them, playback errors are inevitably going to happen.  For each Activity Call, you have a new option to control how AutoBloks will respond to errors.


  • Show prompt with options – This is the default behavior and is how AutoBloks has always behaved up until now.  The user will be prompted with a dialog to retry, continue, or stop.
  • Stop running – Log the error and stop further execution.
  • Continue to the next activity call – Log the error, but try to continue the execution.

These additional options allow you to refine the behavior of a process to better handle situations where errors are expected and you want to perform a specific action without the delay of being prompted.

We’ve known from the beginning that AutoBloks needed to support more advanced error reporting than just letting you know if you forgot to populate a required field.  We are excited to announce that AutoBloks 18.12.1 is now available and brings support for a comprehensive rules-based engine that allows for the reporting of errors, warnings, or other informational messages based on how you use the tool.

Errors tend to be the types of problems that, when left unresolved, will cause issues if you try to run your Process.  In fact, if you try to run a Process that has errors, you will get a dialog prompting you if you really want to run it.

Warnings, on the other hand, tend to be less severe.  They should not be ignored, but also should not cause a Process to fail playback.

Messages are purely informational in nature.

Meet the Error List Window


NOTE: Users upgrading from a prior version of AutoBloks may not see the Error List tool window by default since your previous layout (without that window) is being restored. You can use the View tab of the Command Ribbon to select the Error List command from the Tool Windows group, or, from the same View tab, select Restore to Default from the Layout group to apply the new default layout.

This new tool window provides a central location to view and manage any potential problems.  The tool bar at the top allows you to filter the view to only show the items that interest you.  Specifically, you can control if the list only shows problems from the Current Document (i.e. the document you are actively working on) or Open Documents to see every possible problem from all open documents.

Additionally, each message type can be toggled on or off. If you only want to see Error messages, for instance, you can toggle off Warnings and Messages.

Each problem in the Error List also has a context menu with the available actions:

  1. Go To Location – When available, this command will adjust the selections within AutoBloks to highlight the source of the problem and move focus to the relevant control (Tip: This is the default action and will be executed if you double-click the item in the Error List)
  2. Show Help – Most commands should have a help page associated with them, and this command will open the corresponding page in your browser (Tip: The Code value in the Error List is also hyperlinked to open the same page quickly)

Error and Warning Indicators

As you use the application and introduce Errors or Warnings, you will see indicators appear throughout the user interface to help draw your attention.

Activity Call List

In the Activity Call list, small overlay icons will appear in the bottom-right corner of the standard Activity icon.  When you see one of these icons, it means one or more of the corresponding problems is present in the configuration of your Activity Call.  You can either look at the Error List window to review the problems or select the Activity Call to populate the Instructions pane and drill down into the issue.  The following shows a Warning on the “Start timer” activity and an Error on the “Verify expression value” activity.



When defining the Instructions of an Activity Call, there are multiple tabs where details may be provided.  Tabs will have a Red or Yellow indicator on the relevant tab if Errors or Warnings on present on the controls within that tab.  The following shows there is an Error on the Arguments tab:


Individual controls will also have a Red or Yellow indicator next to each control with one or more problems.


If you hover the mouse over the indicators, a tool tip will display the details of the first problem and indicate if other problems are present as well.  The following shows a tool tip for a control that has two errors:


The body of the tool tip displays the message for the first problem.  In the footer, the text “(+1 more)” indicates that 1 additional error has also been detected and will be available in the Error List tool window.


The initial release includes rules to cover the most common problems that might arise while using AutoBloks.  The full list of rules is available here.  A summary of key functionality provided by these rules includes:

  1. Required fields for arguments and element identification must be populated
  2. Expression syntax must be used correctly
  3. Variables used within expression syntax must exist
  4. When arguments expect certain values or data formats, the input must match the expectation

This is just the beginning!  We spent a lot of time developing a rules engine that is very flexible and, as a result, we can easily add new rules to expose additional information to the user.  Have an idea for a rule you’d like to see implemented?  Please contact support and share your idea.

More Hints

Resolving errors is so important to successful automation that we have included some other hints in the user interface as well.

If the Error List tool window has any errors that match the current filter settings but the tool window is not selected, the tab will “glow red” (fades in an out).  In the following screen shot, the “Output” tool window is selected and the “Error List” tool window is tinted red to indicate errors are present:


The following shows a button that will appear on the right edge of the status bar if any errors are detected.  This is a total count of known errors and is not impacted by the filter settings of the Error List tool window.  Clicking the status bar button will activate the Error List tool window.


Say “hello” to AutoBloks!  Earlier this year, we set out to build a new automation tool, and the initial offering from that journey is officially launching today with support for web automation through Chrome, Firefox, and Internet Explorer.  With so many automation tools already on the market, you may be asking “why build yet another automation tool?”  We believe the answer to that question is easy… too many people who could be using automation simply are not doing so.  The tools have been around for decades, so why aren’t people using them?  Answering this question is a little harder than the first and there is surely no one answer, but we believe a big part of the problem is that the tools don’t fit the users.

While functional testers in a QA department are part of an IT organization, that does not automatically grant them the technical skills of some of their IT colleagues.  Automation tools are often complicated or unapproachable to these users, so they keep doing their work manually.  This is the user who is underserved by automation tools on the market today and are exactly who we believe can benefit the most from AutoBloks.

What About Keyword-Driven Frameworks?

For many years, the solution to the complexity of automation tools has been for a team of advanced users to create keyword-driven frameworks.  Users of any skill level could then use familiar tools, like spreadsheets, to build their automation from a series of keywords established by the automation team.  A special driver script, written in the automation tool itself, could then read these keywords one-by-one to perform an action corresponding to each.  This is a great concept because it allows a small team of expert users to handle the complexities of automation while enabling a much larger group of users to translate their business knowledge into automated scripts.

While the concept is great, the execution is often flawed.  The initial set of keywords is rarely enough, so users are frequently asking the automation team for more support.  As the number of keywords grows, it becomes more difficult for users to know which keywords are available or to fully understand what each keyword does.  Most keywords cannot properly execute without one or more arguments as input, so users now must understand which data is required, the types of data allowed, and how to populate it.  That’s even before you try to tackle having the output from one keyword be used as input on another.  Automation is also an iterative design process (try, fail, fix, repeat), so users are not removed from needing to use the original automation tool.  What starts as a solid effort to improve automation then turns back into the exact problem they were trying to solve in the first place… a complicated automation solution.

Keywords Evolved

AutoBloks builds on the great concept of a keyword-driven automation framework while addressing many of the shortcomings.  First and foremost, users are given a tool purpose-built for automation at any skill level and not asked to use spreadsheets, text editors, or other tools designed for anything BUT automation.

Relying on an automation team is a bottleneck, so we have given the user all the power.  Keywords are presented in AutoBloks as categorized Activities.  Each one has a description of what it does and the arguments, if any, are clearly defined with all the details the user needs to know.  Users simply drag-and-drop the needed activities, populate any arguments, and move on to the next activity.  When it comes time to test what you’ve built, you do so directly in AutoBloks.  Run your process from end-to-end, step over activities one-by-one, or set breakpoints to pause at a certain step.  If your playback fails, AutoBloks will let you retry the activity, skip over it to continue, or stop playback completely.  You can even correct a bad activity before retrying it, so you don’t have to start all over again!

Just the Beginning

This is, quite literally, just the beginning of AutoBloks.  There are many more capabilities we want to add to AutoBloks but believe what we have today can already address the automation needs of many.  In the near future, we will be adding support for important automation concepts like centralized element repository and reusable activity blocks (i.e. user-defined functions).  Of course, we will also be expanding the list of built-in activities to provide more and more functionality out-of-the-box.  It is going to be a long journey, and one we are excited to continue.

FREE Community Edition!

We are delighted to make this new product accessible to non-enterprise users who may not have otherwise had access to automation tools.  Individuals, non-profits, and small businesses (under $1 million of annual revenue in US dollars) can all download and use the Community Edition of AutoBloks completely free!  Absolutely no strings attached, although we hope the community will share their feedback with us and help us build a better product for everyone.

Go ahead and check it out today, and please let us know what you think.

We are ready with another maintenance release of Test Design Studio that brings a significant new feature. You can see the change notes and download now.

Run Code Analysis from the Command Line

This is a big one!  The Code Analysis functionality of Test Design Studio is perhaps the most important functionality in the tool, and this one little update opens up a world of new possibilities.  You can now trigger Test Design Studio to load a Project or Solution, analyze the code, and export the results… all from the command line without having to interact with the user interface!  Of particular interest, this should enable you to integrate Test Design Studio into your DevOps pipeline.

TestDesignStudio.exe "C:\TDS Solutions\MySolution.tdssln" -Analyze "C:\Results\MySolution.Analysis.csv"

The above loads a solution called “MySolution.tdssln” and outputs the analysis results to “MySolution.Analysis.csv”, a comma-separated values file.  This standard format can be opened in Excel or parsed by any number of 3rd-party solutions.

We started with CSV because that format was already supported by Test Design Studio using the File –> Export -> Excel option from the main menu, but more formats can be supported.  If you need a different format, please reach out and let us know what you are looking for.  If you have any challenges integrating Test Design Studio with your DevOps platform, we’re ready to work with you and make sure you get the functionality you need.

Naming Convention Rules Change

The naming conventions feature allows you to create a series of rules that are applied to named declarations in your code to make sure you are following a standard naming convention.  Use our built-in rules or create your own!  With this release, we changed how the “Matches” rule looks at regular expressions to ensure the expression fully matches the given term.  Previously, the ^ and $ characters were added to any pattern that did not include them to ensure a full match, but this caused issues with some alternation patterns.  Those characters are no longer added to your pattern and, instead, we now make sure that the length of the pattern match is the same as the name being verified.  Make sure any regular expressions you define will fully match the entire name to be successful.

If you are using our built-in rules, your files are automatically updated with this release.  If you copied our rules or created a new one of your own, make sure you look at the changes in the macro patterns we define in our rules so you apply the same to your own files.  If you modified the built-in files without copying them to a new location, your modifications will be overridden by this update.  Please make sure you are maintaining your edits outside of the application installation folder to avoid future overwrites.

Incremental Search

We always included an introduction to the Incremental Search feature in our getting started walk through, but it never had a dedicated help topic until now.  For those that skip the walkthrough, you might have missed out on this great productivity booster.  As a reminder for those who missed it, Incremental Search allows you to quickly and easily navigate to matching search terms in the document, all without removing your hands from the keyboard or loading a blocking UI element.

To begin Incremental Search, press the keyboard shortcut Ctlr+I to start searching forward, or Ctrl+Shift+I to start searching backwards. The status bar will then display “Incremental Search:” or “Reverse Incremental Search:” to match the shortcut you pressed.

With Incremental Search active, begin typing your search term. The characters you type will not be entered in the editor, but, instead, will be used to define the search. As each character is typed, Incremental Search will move the selection to the first match and the status bar will be updated to display your search term to help confirm what you have typed (e.g. “Incremental Search: MySearchTerm”). If at any point you have typed a term that is not matched in the text, the status bar will display “(not found)” after your search term.

Once you have defined your search term, you can easily navigate to all the matches for the same term. No matter whether your started with Ctrl+I or Ctrl+Shift+I, pressing Ctrl+I while Incremental Search is active will move forward to the next term, and Ctrl+Shift+I will move backwards to the previous term. Continue issuing either of these keyboard shortcuts to navigate through all the matched terms.

Incremental Search mode will be automatically cancelled if you change the selection with mouse or keyboard. You can manually cancel Incremental Search with the Esc key.

If you’ve never tried Incremental Search, you owe it to yourself to give it a shot.  Try performing Incremental Search for the term “dim” to quickly jump between all your declarations, or enter the name of a variable to cycle through all the places it appears in the file.  Once you see how easy it can be to perform these simple navigations, you’ll wonder who you ever lived without it. We put together a quick 2-min video highlighting the feature. Check it out!