Skip to main content

Eggplant Functional 21 Release Notes

The notes below provide descriptions of the new features and changes introduced with each release of Eggplant Functional. You are strongly encouraged to read about the relevant changes whenever you upgrade from an earlier version.

Potential compatibility issues are highlighted in RED.


Mac: macOS 11, macOS 10.15, macOS 10.14, macOS 10.13, macOS 10.12.

Windows: 64-bit distributions only. Windows 10, Windows 7, Windows Server 2016, Windows Server 2012, Windows Server 2008.

Linux: 64-bit distributions only. Ubuntu 16. Red Hat 7. CentOS 7.

Ports: TCP 5052-5054. For SUTs: RDP: 3389. VNC: 5900. WebDriver: 4444.


  • Eggplant Functional will no longer support Windows 7 starting in 2021.
  • Red Hat 6 and CentOS 6 are no longer supported.
  • A bug exists in the MySQL Connector for ODBC 8.0 on Windows 10 systems that causes Eggplant Functional to crash when connecting to an ODBC database. The crash typically occurs when connecting for the second time. See the MySQL forums here for any updates on the status of this issue from MySQL. The only known workaround is to use the older version 5.3 connector instead.
  • Scheduler functionality will be removed in a future release of Eggplant Functional, as this functionality will be available as part of Eggplant DAI.

21.3.1 (3 September 2021)


  • Support for EggDoc has been suspended until Eggplant Functional 22.0.

Bug Fix

  • Windows systems no longer crash when users are running or editing scripts in Eggplant Functional.

21.3.0 (14 July 2021)


  • Advanced RDP settings are now available the on the Connection tab on the Preferences panel.
  • FreeRDP debug logging is now available on all supported platforms, with the new “EnableRDPDebug” default.
  • Enable SmartCard option is now available for RDP connections in the Add/Edit Connection panel for all Windows users. Note that using this option requires network security with smart cards be implemented at the customer site. SmartCard connections can be made with single and multiple certificates on the card.

SenseTalk Improvements

  • Adds support for the plus sign (+) as a unary plus operator, enabling SenseTalk to treat string representations of numbers that include a leading plus sign as valid numbers.
  • Adds as a positive number and as a negative number operators, as equivalents to ABS() or -ABS() function calls.
  • Adds new unit definitions: millimicron (plural millimicrons) as an older name for nanometer, v as an abbreviation for volts, and new historical price entries (based on the Consumer Price Index) for the years 2014 to 2020 (dollars_2014 … dollars_2020, and cents_2014 … cents_2020). Also recalibrated the CPIDollar so that dollars are now equal to dollars_2020.
  • Adds support for “EggDoc” which is a tool for generating documentation in HTML format from information contained in specially-formatted comments in the scripts within an Eggplant suite. This includes support for the special comments and the eggdoc command. To see examples of how to use EggDoc, just run the “eggdoc copy” command. This copies the EggDoc.script from the EggplantCommon.suite installed with EPF to your currently active suite.

Bug Fixes

  • Ensures file types in the .gitignore file are correctly ignored
  • Fixes an issue so Studio schedules run via the Command line again
  • Corrects an issue with WebDriver connections failing in DAI execution mode
  • Ensures snippet failures properly handle “throws”
  • Provides the correct path for the results file
  • Ensures CompareScreen masking options work as expected on MacOS 10.15 (Catalina)
  • Corrects an issue saving API tests
  • Preserves image bitmasks on restart of Studio
  • Ensures RDP connections successfully connect even when SmartCard is enabled, but not used
  • Ensures Studio properly connects SmartCards with specific configurations
  • Improves performance and stability of executing tests in DAI from the runner

21.2.0 (11 May 2021)


  • Officially supports macOS 11 (Big Sur):
    • Eggplant Studio, iOS Gateway, and Android Gateway in concert with Eggplant DAI 5.2.
    • Note that Eggplant DAI requires macOS 11.2 and is not compatible with macOS 11.1.
  • Adds support for multiple monitors with RDP connection:
    • As many as 5 monitors can be now displayed in an RDP connection in the Fusion Engine. Additionally, new SenseTalk commands allow users to manage these monitors in the Studio Viewer window to assist in automation tasks.
  • Improves security of SUT credentials:
    • The Fusion Engine improves the encryption mechanism and tightens the security of credentials used to connect to a SUT by storing and retrieving them from the system keyring. This new capability makes secure objects a first-class citizen, prevents passwords from appearing in plain text, and stores SUT passwords in the system keyring.
  • Adds SenseTalk commands for zip and unzip of files and folders:
    • SenseTalk now offers commands to quickly compress and decompress files and folders to easily work with large data sets. Additionally, optional parameters are included, such as password, encryption, compression level, and override existing files.
  • Enables end-user license agreement (EULA) in-app acceptance on first launch:
    • Available from Help menu as well, with date of acceptance.
    • Does not appear for FEDrive (DAI) or CLI without GUI.

SenseTalk Improvements

  • Adds the ability to delete items by value, rather than only by their position. This is done using an each expression, which can be used to delete items in a list or any text chunk type (lines, words, items, or characters). A where, which, or whose clause selects the specific values to be deleted:
delete each item of scores which is equal to zero
delete each line of file "entries" which is empty
delete each item of subscriberList whose expirationDate is earlier than yesterday
  • Adds the ability to use each expressions with many commands to apply the command action across many items in a list or text chunks in a string (lines, words, items, or characters). A where, which, or whose clause can be used to select specific values to be affected. The commands that support this include: put, set, insert, push, pull, pop, replace, sort, split, join, add, subtract, multiply, divide, reverse, shuffle, add properties, replace properties, remove properties, retain properties, rename properties, and read.
set each item of grandTotals to zero — sets each item in a list
add 5 to each item of scores which is less than 20
put "*" after each word of text which ends with "ology"
rename each item of recordList using internalRecordNames
pull each item of readings which is more than 100 into highValues
  • Adds four new every expressions, which are similar to each expressions but are used to test a set of values at once to see if they meet a certain criterion. The four variations are:
    • every: to determine if a test is true for all values;
    • not every: to determine if a test is not true for all values;
    • at least one: to determine if a test is true for at list one value;
    • not one of (or none of): to determine if a test is false for all values.

These expressions can be applied to all, or a selection of, items in a list or text chunks in a string (lines, words, items, or characters). To apply the test to a selected set of values rather than all values, a where, which, or whose clause enclosed in can be used to specify which values to include.

set numList to [1,3,7,12,43,99]
put every item of numList is a number —> True
put not every item of numList is divisible by 3 —> True
put at least one item in numList is divisible by 3 —>True
put at least one item in numList is 77 —> False
put not one item in numList is less than 0 —> True
put none of the items in numList is equal to 500 —>True
  • Added a zip file or zip folder command for creating a .zip file archive. These commands will create a compressed archive of the contents of a file or of the entire contents of a folder. You can optionally specify a name and/or location for the created .zip file.

      zip file "abc.d" — creates file "" in the same folder
      zip folder "results" as ""
      zip file "myData.txt" into folder "zippers"

    Additional options are available to encrypt the archive with a password, set the compression level, and to specify the files to be included and whether subfolders should be included when zipping the contents of a folder.

  • Added an unzip file command for extracting a .zip file archive. The unzip file command will uncompress and extract the contents of a .zip file. You can optionally specify a name for the unzipped file. You can also specify a folder to receive the unzipped contents.

      unzip file "" as "localData.txt"
      unzip file "" into folder "oldResults"

Additional options are available to decrypt a password-protected archive, and to control whether existing files should be overwritten, or only overwritten by newer versions.

Bug Fixes

  • StartMovie no longer crashes in some situations.
  • Searching for an image in a collection will no longer cause CPU spikes and Studio to become unresponsive.
  • Fusion Engine now preserves the current connection between snippets.
  • Fusion Engine now properly reports exceptions in all situations.
  • The OCR Engine is now available when running on an Azure environment.
  • Fusion Engine satisfactorily passes records containing numbers from Eggplant DAI.
  • Fusion Engine no longer adds additional characters when passing records from Eggplant DAI.
  • Studio now provides the correct path to "the result" when the script is in a folder.
  • GPSListParser errors no longer appear in the log and descriptions are retained in image files. Note that on Mac, description text has not been retained since Studio 19.2.
  • Studio no longer crashes in certain situations when opening a session.
  • An Image search now politely ends if DOM Match diagnostic preference is enabled and the image cannot be found.
  • The Image Selection tray is properly disabled in the image collection while performing a search.
  • Logging has been reduced when a SmartCard is not enabled for an RDP Connection.
  • SenseTalk correctly asserts when using the within operator.
  • SenseTalk accurately asserts when using the is not between operator.
  • SenseTalk consistently compares date/time values in certain situations.
  • SenseTalk immediately writes binary data to a file when the full path to the file was absent.
  • SenseTalk no longer accidentally returns a list when getting the minimum or maximum value of a single-value list.
  • SenseTalk unarchives date/time values precisely.
  • SenseTalk handles cases where a range of pattern matches would sometimes acting like a string, not a list.
  • The link destination is accessible from a symbolic link file on Linux systems.
  • The "parameters" property is once again populated by the extractURL function on newer versions of MacOS.
  • Restores the standardFormat representation of binary data, which had changed on newer versions of MacOS.

21.1.0 (1 Feb 2021)


  • The StartMovie command now records in MP4 format by default.
  • You can now choose to have Eggplant Functional add a new representation of an image instead of healing the existing image when Automatic Asset Healing is enabled.
  • Automation can now be done in real-time on an iOS device to simulate reactive behavior, such as playing a game. This functionality requires iOS Gateway 5.8.
  • Adds and updates some SenseTalk commands:
    • Adds the reverse function to return a string or a list in reverse order. If reverse is called with a parameter that is a list or range, the value returned will be a list or range in the opposite order. Otherwise the parameter is treated as a string and the characters of the string are reversed:
        put reverse("abcd") —> "dcba"
put the reverse of A to Z —> Z to A
put reverse of ["dog","cat","toad"] —> ["toad","cat","dog"]

The function also can be called using a reversed syntax:

        put [1,3,46,9,5] reversed —> [5,9,46,3,1]
put "goldenrod" reversed —> "dornedlog"

  • Adds a shuffle function to return a string or a list in a random order. If shuffle is called with a parameter that is a list, the value returned will be a list of the same values in a random order. Otherwise the parameter is treated as a string and the characters of the string are shuffled randomly:
        put shuffle("ABCD") —> "DBAC"
put the shuffle of [1,2,3,4,5,6] —> [5,1,3,6,4,2]
put raffleTickets.shuffle into hopper

The function can also be called using a shuffled or in shuffled order or in random order syntax:

        put [jack,queen,king,ace] shuffled —> ["ace","queen","king","jack"]

  • Adds reverse and shuffle commands to reverse or shuffle the elements of a container. If called with a variable or other container, its contents are reversed or shuffled directly. Otherwise the result of the reverse or shuffle operation is assigned to the variable it:
        reverse "ABCD" — (not a container, so result goes into 'it')
put it —> "DCBA"
set myList to [3,4,5,6,7,8]
reverse myList
put myList —> [8,7,6,5,4,3]
shuffle myList
put myList —> [4,6,5,8,3,7]
shuffle [1,3,5,7,9] — (not a container, so result goes into 'it')
put it —> [7,1,5,9,3]
reverse the lines of fileContents

  • Adds the ability to iterate through the values of a repeat with each loop in reverse order, by specifying in reverse order:
        repeat with each item of [1,2,3,5,8] in reverse order
repeat with each line of file "input.txt" in reverse order

  • Adds a rename properties command and renaming properties operator to rename properties of a property list:
        set simplePlist to {a:1, b:2, c:3}
rename properties {a:"able", b:"bravo"} in simplePlist
put simplePlist —> {able:1, bravo:2, c:3}

put {firstName:"Rex", age:88} renaming {firstName:"name"} —> {age:88, name:Rex}

  • A variable can now be used in place of a number in certain pattern expressions.
        set minLength to 3
set maxLength to 6
put <from minLength to maxLength characters> matches "abcd" —> True

Bug Fixes

  • Model execution no longer fails with "Snippet error" in certain situations.
  • Model execution no longer crashes with "Invalid Image File" in certain situations.
  • Video recordings no longer contain glitches and jumps in certain situations.
  • Fixes a SenseTalk rounding logic error that could return –0.
  • Sending a GET request in an API call on Windows through a system proxy no longer returns a "400 Bad Request" error.
  • Certain combinations of the FramePerSecond property no longer prevent videos from playing back.
  • API tests now runs consistently on both Mac and Windows.
  • SenseTalk no longer misinterprets some operators based on the grammatical structure of the script.
  • SenseTalk now supports using variables in cases like "from x to y" and "z or more".
  • Studio no longer crashes when dragging suite tabs on Mac.
  • TextDifference once again is suggested when appropriate in the OCR Update panel.
  • The Run window now displays snippets and results during execution from Eggplant DAI design mode.
  • Removes an erroneous error message regarding duplicate unit definitions.
  • SenseTalk no longer adds extra empty items when replacing items in a tree.
  • Fixes an issue where a variable set to missing value (or null) would continue to report as equal to missing value (or null) even after the variable was set to some other value.
  • Corrects a bug that changed a character range to a numeric range (of the Unicode values of the characters) in some situations, such as when the range was stored as an item in a list.
  • Repairs a condition where the retain properties command and retaining operator would also change the capitalization of the retained property name if and only if the property name to retain was given as a single string (not a list or property list).
  • Mends the repeated operator (and quantity of operator) to honor repeating a value as data when "as data" is specified after the value.

21.0.0 (28 Oct 2020)


Bug Fixes

  • Fixes support for FIPS-compliant libraries on Linux.
  • Now correctly encodes tags in XML result output.
  • Fixes an issue where SenseTalk didn't properly handle division operations in certain cases involving fractional units.
  • Addresses a crash that sometimes happened when connecting to or disconnecting from WebDriver connections.
  • Numerous stability fixes and performance improvements.