Skip to main content

Eggplant Functional 22 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.


Mac: macOS 13, macOS 12, macOS 11, macOS 10.15, macOS 10.14.

Windows: 64-bit distributions only. Windows 11, Windows 10, Windows Server 2022, Windows Server 2019, Windows Server 2016.

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

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

Citrix Connection: Citrix Workspace LTSR (22.03) installed on Eggplant Functional Machine, Windows only


  • To provide clarity to users we’ve adopted the following naming of the Mobile Gateways:

    • Classic Android 7.0 Gateway and Classic iOS 6.0 Gateway

    • Mobile Device Connections available for Android and iOS

  • Documentation for the Mobile Gateways have been restructured. The Classic iOS and Android Gateways documentation have separate landing pages while the new Mobile Device Connection documentation is embedded in the Eggplant Functional documentation. Due to this reorganization, bookmarks to the iOS and Android topics will be broken.

  • Tables functionality will be removed in a future release of Eggplant Functional.

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

22.5.0 (11 Apr 2023)


  • Adds new integrated Mobile Device Connection capability for Android and iOS Devices.

    • Users can now test iOS devices from Eggplant Functional running on Windows, in addition to Macintosh and Linux.
  • Provides IPv6 address support for VNC and RDP connections to SUTs.

    • Note: IPv6 address support for WebDriver and API Tests available in future release.
  • Provides enhanced experience of offline documentation.

    • Note: Offline port configuration in Eggplant Functional General Preferences.
  • Updates Eggplant Functional to support running on MacOS 13 (Ventura).

    • Note: Under the Eggplant menu, "Preferences" are labeled "Settings"
  • Adds Remote Clipboard support for Citrix Connections.

  • Supports Active Directory Federation Services (ADFS) Login for Citrix Connections.

Bug Fixes and Improvements

  • WebDriver script execution no longer hangs when using a Xiaomi device.

  • WebDriver elements are now accurately returned on Huawei mobile devices.

  • Improves performance when loading images in some specific cases.

  • Enhances debug-level logging for EULA and Privacy Policy notification.

  • CaptureScreen command no longer captures .png when configured to capture .jpeg in some situations.

SenseTalk Improvements

  • Correctly saves a script, without a NSInvalidArgumentException error, when using the SenseTalk getProp handler.

  • Supports ß (German letter for a double ss named "sz") in property list keys.

  • Executing a shell command on MacOS now honors the “exit all” statement.

Mobile Device Connection Enhancements

Supports automation of any Apple device running iOS 12, iOS 13, iOS 14, iOS 15, iOS 16, iPadOS 13, iPadOS 14, iPadOS 15, iPadOS 16

Supports automation of any Android device running v5.0 or higher

Please note that the Android mobile device connection* is currently in beta and may undergo changes in the future, particularly with regards to image fidelity. We recommend testing it, but caution against migrating test suites with a large number of images until the final version is released.

Note: You must install iTunes on Windows to make iOS device connections

Note: You must install usbmuxd on Linux to make iOS device connections


  • Android and iOS: WebDriver connections automatically created with connection to device

  • Android and iOS: The port assignment is automatically made to the device upon connection

  • Android and iOS: All WebDriver commands are fully supported. Android WebDriver matches Android Classic Gateway 6.0 features.

  • Android and iOS: WiFi connections are supported, but USB connections to machine running Eggplant Functional recommended

  • Android and iOS: Faster performance and improved stability

  • Android and iOS: Improved logging of the application

  • Android: SenseTalk SUTInfo() correctly returns data for devices

  • Android: Honors the ADB version running on the device

  • Android: Supports testing Android apps when FLAG_secure is enabled.

  • Android: SetDeviceOrientation landscapeLeft/landscapeRight now work via WebDriver

  • iOS: Supports testing from Windows and Linux in addition to Macintosh

Defect Fixes

  • Android: WebDriver script execution no longer hangs when using a Xiaomi devices.

  • Android: WebDriver elements are now accurately returned on Huawei mobile devices.

  • Android: Addresses intermittent time out waiting for ADBCallRemote.

  • Android: Pinchin/PinchOut multitouch work as expected.

  • Android: Resolves “WebDriver Created Failed Error” when reconnecting.

  • Android: Resolves being unable to reconnect again after disconnecting (WebDriver).

  • Android: Improvements when the Unicode Keyboard Stuck on screen after changing input keyboard in some situations.

  • Android: Supports automation of OnePlus LE2117 devices which previously failed to start due to permissions.

  • Android: Properly handles cache directory permissions on Android 11 emulators.

Known issues

  • Android and iOS: Recapturing images when migrating from Classic Gateway to Mobile Device Connections may be necessary. Recommend use of Eggplant Functional Auto-healing capability to capture new images as needed.

  • Android and iOS: Eggplant Functional may timeout for Pinch/Zoom with a simulated device location

  • Android and iOS: Rotation of the screen is only updated after setting the Orientation.

  • Android and iOS GetOrientation is only updated after using SetOrientation

  • Android and iOS: Reboot of the device is not yet supported.

  • Android and iOS: Scaling and Blending is not yet supported.

  • Android: ADBCallRemote("devices") is no longer supported. You may now only use ADB shell commands.

  • Android: RemoteScreenSize may have a mismatch on some devices

  • Android: AltKey, ApplicationKey, Backspace, CapsLockKey, ControlKey, Keypad0 to Keypad9, KeypadDecimal, KeypadDivide, KeypadTimes, Numlock, PauseBreak, ScrollLock, ShiftKey are not yet supported on all devices.

  • iOS: Messaging of confirmed installation has changed with InstallApp

  • iOS: Does not support iOS Simulators. Recommend using Sauce Labs or Classic Gateway

  • iOS: Bi-Directional File Transfer is not yet supported

  • iOS: Bi-Directional Clipboard is not yet fully supported

22.4.0 (9 Jan 2023)


  • Provides native support for Citrix Desktop connections

    • Note: requires Citrix Workspace LTSR (22.03) on Eggplant Functional Machine

    • Note: access to the Remote Clipboard from Eggplant Functional and use of RemoteClipboard SenseTalk commands are not yet available on Citrix SUTs

    • Note: ScrollWheelDown and ScrollWheelUp SenseTalk commands are not yet available on Citrix SUTs

  • Updates Eggplant Functional to support running on Red Hat Enterprise Linux 8

  • Adds Sauce Connect capability to Sauce Labs Devices and Browsers

  • Updated Privacy Policy terms

Bug Fixes and Improvements

  • Fixes obscure crash when formatting script beginning with “function” on Windows

  • Correct several broken links to documentation from within Eggplant Functional

  • Sends .ips fileș when reporting crashes to Eggplant from macOS Monterey

22.3.0 (4 Oct 2022)


  • Provides connections to your Sauce Labs Devices and browsers from within Eggplant Functional

  • Introduces the new Eggplant Gateway to manage connections to SUTs, with the initial connection type of Sauce Labs Devices and Browsers

Bug Fixes and Improvements

  • Updates the Reprise License Manager (RLM) client to v15 and provides the updated RLM Server version on the Eggplant download server

  • Adds the rulmutil to the RLM package

  • Corrects an intermittent error that would cause 0 byte images to be uploaded to DAI

  • Properly handles a rare workflow that would cause "published failed" or "internal server error" when uploading results to DAI

  • Improves stability when running scheduled tests from DAI

22.2.0 (7 Jul 2022)


  • Provides notification on first launch of Keysight Privacy policy and Opt-out option

    • Note: the label change of the General preference from “Share Installation Details” to “Opt out of diagnostics and usage data collection
  • Improves on-line documentation experience with improved landing page, navigation, and search

SenseTalk Improvements

  • Adds the ability to access and change the timeZone of a date/time value through several new properties: TimeZone to access or set the time zone identifier name (such as "America/New_York");TimeZoneAbbreviation(or TimeZoneAbbrev or TimeZoneAbbr) to access or set the time zone abbreviation (such as "MDT"); and TimeZoneOffset to access or set the time zone offset from UTC of the date/time value.
put now into aTime

put aTime —> 2022-04-12 09:41:58 -0600

put aTime's timeZone —> America/Denver

put aTime's timeZoneOffset —> -6 hours

set aTime's timeZoneOffset to -2 hours

put aTime —> 2022-04-12 13:41:58 -0200

set aTime.timeZone to "GMT"

put aTime —> 2022-04-12 15:41:58 +0000
  • Adds a UTC time format (and longshort, and abbreviated variations), which returns the current time in the UTC time zone (Universal Coordinated Time). The word Zulu may also be used as a synonym for UTC (the term "zulu time" is common in certain military and aviation contexts):
put the UTC time -- 2022-04-11 15:18:29 +0000

put the long UTC time -- 2022-04-11 15:18:29.312 +0000

put the short zulu time -- 15:18 +0000

put the abbrev UTC time -- 15:18:29 +0000
  • Adds a military time format (and longshort, and abbreviated variations), which returns the current time in the UTC time zone (Universal Coordinated Time), using formats based on the U.S. military's Date Time Group formats (see wikipedia: Date-time Group):
put the military time -- 11 1518Z Apr 22

put the long military time -- 11 151829Z Apr 22

put the short military time -- 1518Z

put the abbrev military time -- 11 1518Z
  • Adds UTCTime (and synonym ZuluTime) as special dynamic predefined variables (similar to now) which return the current time in the UTC time zone, in the UTC time format.
put UTCTime —> 2022-04-11 15:18:29 +0000

put zuluTime —> 2022-04-11 15:18:29 +0000
  • Adds TimeZoneOffset as a synonym for the UTCOffset function and enhanced its functionality.

This function can now be called with up to 2 optional parameters. When called with no parameters, it returns the local offset from UTC time as before, except the offset is now returned with units of hours (rather than number of seconds, with no unit) to improve usability (Note: The SecondsFromGMT function still returns the seconds as a plain number, as before).

When called with either one or two parameters, one parameter can be a date (as before) or a time zone name or abbreviation. Or both a date and a time zone can be given (in either order), to determine the offset in that time zone on that particular date. A time zone can be given using its official id name (e.g. "America/Los_Angeles"), the time zone abbreviation ("PDT"), or any unique part of the name, ignoring spaces and special characters (e.g. "los angeles").

put the timeZoneOffset —> -6 hours (the offset in the local time zone on the current date)

put UTCOffset("paris") —> 2 hours (the offset in the given time zone on the current date)

put timeZoneOffset("New York", "2022-02-22") —> -5 hours

Bug Fixes and Improvements

  • Provides Proxy Pac support for Windows

  • Improves error handling when attempting to generate CaptureScreen images with an invalid name

  • Creates a full file path when creating a CaptureScreen Image if the folder does not already exist

  • Enhances logging of Eggplant Functional sessions in Eggplant DAI

  • Improves the precision of some unit conversion calculations

  • Allows short month as a valid token in date formats, as documented

  • Fixes a problem with the run command loading a script in a subfolder improperly, interfering with later access

22.1.0 (25 Apr 2022)

SenseTalk Improvements

  • Adds unit format strings, which control the display and formatting of units for numeric values, such as time intervals, length or distance, mass or weight. For example:

    • Display a duration in minutes as a number of hours and days like this:
    put 4485 mins with format "[days] days, [hours] hours, and [min] minutes" —> 3 days, 2 hours, and 45 minutes

  • Display a duration in seconds as hours, minutes, and seconds like this:
    put 521957 seconds format "[hrs 00]:[mins 00]:[secs 00]" —> 144:59:17

You can use unit format strings with the:

  • format operator: with format, using format, format
  • format property of a variable
  • formattedUnits function
  • the unitFormats global variable.

For example:

    put 35 ounces using format"[lb] lb [oz] oz" —> 2 lb 3 oz
  • Adds the formattedUnits function. Apply a unit format to a numeric value with a compatible unit type and return the formatted value. For example:
    put formattedUnits("[feet] @, [inches] @", 22 in) —> 1 foot 10 inches
  • Adds the splitUnits function. Convert a numeric value of a certain unit type into a list of compatible units that add up to the original value. The resulting values may be somewhat less than the original value if the conversion results in an amount that is smaller than the final unit type.
    put splitUnits(22 in, "yd","ft","in") —> 0 yards, 1 foot, 10 inches
  • Adds the unitFormats global property. Set a property list to hold the default unit formats for one or more types of units. The keys of the unitFormats must be valid unit types returned by the unitTypes function. The corresponding value for each unit type must be a unit format string.
    set the unitFormats.mass to "[lbs?] @ [oz.] @"
put 67 ounces—> 4 lbs 3 oz

  • Enhances the unitNames function to accept a parameter.
    • Set the parameter to "all", or no parameter, to return a list of all unit names that SenseTalk recognizes.
    • Set the parameter to the name of a unit type to return a list of units of that type. For example:
        put unitNames("speed") —> ["knot","mph","mps","kph","knots"]

  • Enhances the unitTypes function to accept a parameter.

    • Set the parameter to "all", or no parameter, to return all unit type names that SenseTalk recognizes, including synonyms.
    • Set the parameter to "standard" to return all standard unit type names that SenseTalk recognizes, excluding synonyms.
  • Enhances the unitType function to always return the standard unit type for the unit name of a numeric value. You can also return the standard name for any given unit type. For example:

put the unitType of "weight" —> mass
  • Use the add, subtract, multiply, and divide commands with two expressions rather than an expression and a container. The resulting value of the operation is stored in the variable it.
    divide 12 by 3
put it —> 4

Bug Fixes and Improvements

  • Improves script performance across all scripts with significant improvements for certain operations, such as updating the values of properties in property lists.
  • Improves the stability of test executions in Eggplant DAI.
  • Improves general stability and performance.
  • Introduces improvements to logging to help debugging.
  •  Adds support for a keyboard shortcut for Save All:
    • Windows: Ctrl+Alt+S
    • Macintosh: Cmd+Opt+S
    • Linux: Ctrl+Alt+S.
  • In SenseTalk:
    • The put command now functions correctly with the multiple assignment of variables.
    • The add function now throws consistent exceptions.
    • The archive and unarchive functions now correctly archive a number format or unit format along with the numerical value.
  • Adds several Date and Time commands to the SenseTalk Language Browser.
  • Breakpoints are now honored in a script that starts with a comment section.
  • Movies now stop recording when a script execution is aborted or fails with an exception.
  • Addresses crashing when code that contains a malformed imagelocation format is executed.
  • Provides unique temporary file locations for the OCR files of every Eggplant Functional instance that is running.
  • RLM realm licenses are now correctly reported in the license panel when using the .opt file.
  • runscript.bat now handles the Git status correctly in all situations.
  • Eggplant Functional no longer hangs or crashes when using roaming RLM licenses under certain circumstances.
  • Accurately reports the result file location in the output log file.
  • RLM Server can now run on Macintosh Catalina and later versions.
  • Labelling in the OCR Tuner now correctly reads "multi-column" rather than "multi-line" text.
  • Auto Update for images no longer creates long file names when Save as new Image Rep is selected.
  • File > New Helper Suite now opens the New Test Suite dialog box as expected.
  • When an image replaces a deleted image collection, that image now opens successfully.
  • Under certain circumstances, Eggplant Functional is now able to lock the suiteinfo file.
  • In most cases, _registerNewObject and _unregisterNewObject messages are no longer written to logs.
  • Interface tabs now display correctly in red/brown when running Eggplant Functional on Macintosh Big Sur and Monterey versions.
  • Fixes a problem with archiving large integers.

22.0.0 (26 Nov 2021)


  • Adds the capability to program and control Keysight test and measurement devices with SenseTalk, using:

    • The Virtual Instrument Software Architecture (VISA) protocol to connect to a device

    • Standard Commands for Programmable Instruments (SCPI) to control and obtain information from the device.

      This functionality is only available for supported Windows versions through the ST_VISA Xmodule included with SenseTalk. Keysight IO Libraries must also be installed on the machine.

SenseTalk Improvements

  • Adds VISA and SCPI functionality for connecting to and controlling test and measurement devices, including the following functions:
    • VisaDevice: Obtains a connection to the device.
    • VisaAddresses: Obtains a list of known device addresses.
    • ST_VISA_Version: Gets information about the current version of the Xmodule that is installed with SenseTalk.

When a VisaDevice connection is obtained, two-way communication to control and obtain information from the device is available through a number of SCPI-based commands and functions.

  • Adds the assertionPassedDelegate and the assertionFailedDelegate global properties. Use these properties for setting objects to receive assertionPassed or assertionFailed messages when an assert command is executed. When a delegate object is set, one of the following handlers is implemented for the messages:

    • to handle assertionPassed

    • to handle assertionFailed

      Both handlers receive a first parameter, which is the message text that describes the assertion. The handler for a failed assertion can also receive a second parameter, which is the name of the assertion behavior that was invoked:

    • error

    • warning

    • exception

    • pause

      Use the handlers for tasks such as logging or analyzing the assertions from test executions.

  • Adds support for octal and binary numbers:

    • Octal (base 8) numbers are expressed as 0o (zero then the letter 'O')
    • Binary (base 2) numbers are expressed as 0b followed by one or more zeros or ones.
    set mask to 0o377
put 0b1101 —> 13

  • Adds support for displaying numbers in octal or binary format. Either:
    • Convert a number to as octal or as binary formats
    • Set the numberFormat to "octal" or "binary".
put 255 as octal —> 0o377
put 42 as binary —> 0b101010
put 13 into aNum
put aNum —> 13
set the numberFormat to "octal"
put aNum —> 0o15
set aNum's format to "binary 6"
put aNum —> 0b001101
multiply aNum by 2
put aNum —> 0b011010
delete aNum.format -- go back to using the numberFormat
put aNum —>0o32
set the numberFormat to "0.0#####"
put aNum —> 26.0

You can also specify the number of digits to display, e.g. "binary 6" displays 6 binary digits.

  • Adds support for bitwise operators:
    • bitAnd (bitwise AND)
    • bitOr (bitwise OR)
    • bitXor (bitwise XOR)
    • bitNot (bitwise NOT)
    • bitShift left and bitShift right (shifts bits left or right)
set the numberFormat to "binary 8"
set the bitLength to 8
put bitNot 0b00010101 —> 0b11101010
put 0b00010101 bitAnd 0b00111100 —> 0b00010100
put 0b00010101 bitOr 0b00111100 —> 0b00111101
put 0b00010101 bitShift left 2 —> 0b01010100
  • Adds the bitLength global property to control the number of bits used by bitwise operators.
    • By default, the bitLength is 64, which treats numbers as 64-bit signed integers for purposes of bit operations.
    • Setting the bitLength to anything less than 64 treats the results of bit operations as unsigned integers.
set the bitLength to 32
  • Adds bit expressions and functions to give access to or to set an individual bit within a number:

    • bit 1 is the furthest right bit in the number in binary format, bit 2 is the next left, and so on.
    • Bits up to bit 64 are available, or you can access the value that the bitLength is set to.
    • Each bit is 0 or 1, and is also treated as a boolean (True or False) when testing bits. You can also set the boolean values for a bit to True or False, Yes or No, On or Off, and 0 or 1.
    set the numberFormat to "binary 8"
set controlByte to 0b00001110
put bit 1 of controlByte —> 0
put bit 2 of controlByte —> 1
set bit 7 of controlByte to On
set bit 3 of controlByte to 0
put controlByte —>0b01001010
  • Adds turn on and turn off commands as a convenient, readable way to set properties or other values to On or Off. For example:
    turn on the caseSensitive -- sets the caseSensitive property to true
turn the caseSensitive off -- sets the caseSensitive property to false
turn on bit 4 of powerFlags
  • Adds a sourceExpression or sourceExpr property. This property gets its value from the text of the expression which created that value.
    set timePattern to <1 to 2 digits, ":", 2 digits>
puttimePattern's sourceExpr —> <1 to 2 digits, ":", 2 digits>
put timePattern's regex —> \d{1,2}:\d{2}

In addition, you can use the regex property to hold the value of the corresponding regular expression text.

Bug Fixes and Improvements

  •  Improves the parsing of hexadecimal numbers in SenseTalk:
    • Positive numbers up to 0x20000000000000, the highest integer SenseTalk can represent precisely, which is equal to 2^53
    • 64-bit negative numbers in two's complement, from 0xFFFF_FFFF_FFFF_FFFF (-1) to 0xFFE0_0000_0000_0000 (-(2^53)).
  • Removes an arbitrary limit of 4,000 characters on ODBC commands. There is now no absolute limit.
  • The words up and down are no longer treated as constants in SenseTalk. This means that you can use them as variable names, if required.
  • Adds support for a leading + sign with SenseTalk expressions.
  • Addresses a timeout error in FEDrive when you run a snippet with a shell command with the DAI agent in Run mode.
  • Verified support for WebDriver with Microsoft Edge using Selenium Standalone Server version 4.0.0.
  • Global variables are now passed in and out correctly when using the Extract New Script feature.
  • Spaces are now recognized in search parameters for the OCRSearch diagnostic search.
  • Writes a log statement when you use the Rectangle property with the CaptureScreen command.
  • Addresses crashing in unique workflow scenarios.
  • The Username on the Add/Edit Connection panel is no longer disabled when selecting a type of WebDriver.
  • Improves the clipboard behavior for testing with iOS Gateway and iOS 14.5 and above.
  • Recognizes spaces in the path to the Suites root folder after an upgrade to Eggplant Functional 21.3.1 and Eggplant DAI 5.3.
  • Resolves an error that occurred when incorrect SUT connection details were used for a test execution in Eggplant DAI.
  • Eggplant Fusion Engine no longer generates large log files when executing tests from Eggplant DAI.
  • Improves error codes and logging in Eggplant Fusion Engine when running test executions in Eggplant DAI.
  • Provides enhanced security for connections from Eggplant Fusion Engine to the Eggplant DAI server.
  • Mac Only: Establishes successful Remote Desktop Protocol (RDP) connections from Eggplant DAI in Design mode to Eggplant Fusion Engine.
  • Writes a log statement when Eggplant Fusion Engine is launched in Eggplant DAI.
  • Resolves an exception that occurred when clicking exit fullscreen with the TypeText panel displayed.
  • Resolves an NSInvalidArgumentException and crashes when using incorrect values for the SearchRectangle property.
  • Resolves a crash that occurred when dragging new elements to customize the toolbar in the Viewer window.
  • Addresses an issue that occurred when editing API tests outside of the Eggplant Functional Studio editor.
  • Adds support for socially responsible technical nomenclature as part of Keysight’s Social Responsibility initiative.
  • Adds improvements for general stability and performance.