Recorder Guide
Updated Jul 2026

Documentation › The MaxTAF Recorder

The MaxTAF Recorder

User  Chrome extension · MaxTAF Universal Recorder v2.x

The MaxTAF Recorder is a Chrome extension that watches what you do in a web application — primarily IBM Maximo — and turns it into a runnable MXML test case in MaxTAF Cloud. Record a workflow once, get a deterministic regression test out the other side.

On this page

Installing the extension

The recorder is distributed as an unpacked Chrome extension (Manifest V3). To load it:

  1. Obtain the recorder build from Code Development Ltd (a maxtaf-recorder-v<version>.zip) and unzip it, or build it from source (npm install then npm run build, which produces a dist/extension folder).
  2. Open chrome://extensions/ in Chrome and enable Developer mode (top-right).
  3. Click Load unpacked and select the dist/extension folder.
  4. The MaxTAF Universal Recorder appears in your extensions. Pin it, then open it — it runs as a Chrome side panel.
Why it needs broad permissions

The recorder injects into every frame of the page (all_frames) because Maximo renders inside nested iframes — capturing clicks and inputs there is essential. It requests storage, tabs, scripting and clipboard access to record, persist and export cases.

Connecting it to MaxTAF Cloud

To upload recorded cases straight into a project, open the recorder's Configuration (overflow ▸ Configuration) and set:

SettingValue
MaxTAF environment URL (BASE_URL)e.g. https://mx1.maxtaf.com/ (or your on-prem URL).
Project ID (PROJECT_NAME)The target project's id in MaxTAF.
API key (MAXTAF_API_KEY)Your MaxTAF API key (Admin ▸ User Settings). Use the Validate button to check it.
Maximo URL (MAXIMO_URL)The Maximo instance you'll record against.

If these are blank, the recorder still works but only saves the case as a local file (see SAVE_TO_FILE_ONLY below).

Recording and exporting a case

  1. Open the recorder side panel and click the record button (the red dot). If there are leftover lines, you'll be asked whether to clear them first.
  2. Use Maximo normally — log in, navigate to an application, create or edit a record. Each interaction appears as a line in the panel.
  3. Add checks where you need them by right-clicking an element and choosing an Assert / Store / Verify action (see below).
  4. Click record again to stop.
  5. Click Create MaxTAF Case, enter a case name (letters, numbers, spaces and underscores), choose Overwrite if replacing an existing case, and click Export Case.
  6. The case uploads to your configured project and opens in the MaxTAF Workspace as an MXML case, ready to run.
Other panel actions

The overflow menu also offers Save/Open Recording (keep a recording as a file), Copy all as MXML (copy the generated MXML to your clipboard), Compile all lines, and the onboarding Guide.

What the recorder captures

These interactions are recorded automatically as you work:

InteractionBecomes (MXML)
Clicking an element<ui:click>
Typing into a field<ui:clear> + <ui:sendKeys>
Navigating to a URLa native driver.get(...) step
Opening a Maximo applicationan app-navigation step using the Maximo address parameter
Moving between frames<ui:selectFrame> (recorded automatically)

Frame switches are important for Maximo: the recorder tracks when your interaction crosses into or out of an iframe and inserts the frame-select step so replay lands in the right place.

Assertions and stored values

Right-click any element and open the MaxTAF Recorder context menu. Actions are grouped:

GroupActions
Assert (fails the test if untrue)assertValue, assertText, assertTitle, assertElementPresent, assertElementRequired, assertElementReadonly, assertElementError
Store (saves to a variable)storeValue, storeText, storeTitle
Verify (non-blocking check)verifyValue, verifyText, verifyTitle, verifyElementPresent
ActionswaitForElementPresent, mouseOver, addReportLine, showClickTag, showSendKeysTag

Store actions prompt for a variable name; the stored value can then be reused later in the case. Title actions ignore the element and use the page title. For the exact MXML each produces, see the MXML Reference.

Settings reference

Configuration lives in the recorder's settings (seeded from a preload-settings.json on install). The keys most users touch:

KeyMeaningTypical
MAXTAF_VERSIONTarget: MaxTAF Cloud or MaxTAF-as-a-Maximo-plugin.cloud
RECORDING_MODERecording engine: maximo (default) or utam.maximo
LANGUAGEOutput language. For Maximo recordings this is MXML (fixed).maximo
MAXIMO_URLMaximo base URL for generated cases / optional auto-navigation.your Maximo URL
BASE_URLMaxTAF environment URL for cloud upload.https://mx1.maxtaf.com/
PROJECT_NAMEMaxTAF project id to upload into.your project id
MAXTAF_API_KEYAPI key for upload auth.mx-…
SAVE_TO_FILE_ONLYIf true, export a local file instead of uploading.false
DISABLE_AUTO_NAVIf true, don't auto-navigate to MAXIMO_URL when recording starts.true
SELENIUM_SERVER / BROWSER / SLOW_DOWN_LEVELExecution settings baked into the generated case's parameters.${mx.system.common_pool} / chrome / 0
PACKAGE_NAME / CUSTOM_NAMESPACESGenerated source package and any custom namespaces.com.maxtaf
Upload requirements

A recorded case is uploaded to MaxTAF only when PROJECT_NAME, BASE_URL and MAXTAF_API_KEY are all set and SAVE_TO_FILE_ONLY is false. Otherwise the case is prepared but not sent. The upload targets POST {BASE_URL}api/maxtaf/import/cases with your X-Project-Id and X-Maxtaf-Api-Key headers — see the REST API.

Headless / automation API

The recorder can be driven without its UI by posting window messages — this is how MaxTAF's AI test cases record a flow automatically. From the page's main frame:

// Start a fresh recording
window.postMessage({ type: 'MXTAF_RECORDER_CONTROL', command: 'startWithClear' }, '*');

// ... perform actions ...

// Record an assertion (searches all frames for the element id)
window.postMessage({ type: 'MXTAF_RECORDER_CONTROL', command: 'contextAction',
  action: 'assertValue', elementId: 'ASSETNUM@483' }, '*');

// Stop and create the case in MaxTAF
window.postMessage({ type: 'MXTAF_RECORDER_CONTROL', command: 'stop' }, '*');
window.postMessage({ type: 'MXTAF_RECORDER_CONTROL', command: 'createCase',
  name: 'MyCase_' + Date.now() }, '*');
CommandDoes
start / startWithClearBegin recording (keep / clear existing actions).
stopStop recording (always before export/createCase).
createCase (name)Build the MXML case and upload it; replies with MXTAF_CASE_CREATED.
contextActionRecord an assert/store/verify/action headlessly; replies MXTAF_CONTEXT_ACTION_DONE.
getRecordedActionsReturn the captured actions (MXTAF_RECORDED_ACTIONS).
updateSettingsInject settings (project id, API key) at runtime without hardcoding.
pingLiveness check (replies MXTAF_PONG).
Run context actions from the main frame

Send contextAction from the top window, not from inside a Maximo iframe — the extension searches every frame to find the element by its real DOM id.

How it works (briefly)

A content script injected into every frame captures your interactions; a background service worker stores them and, on export, compiles them to MXML and POSTs the case to the MaxTAF import API. Maximo recordings always compile to MXML because that language handles Maximo's quirks. If a direct upload can't reach MaxTAF (for example from inside a Kubernetes pod), the recorder falls back to a local proxy-upload path.

Related

MXML Reference · Writing AI Test Cases · Maximo Testing Playbook · Recorder troubleshooting