Draft page
Access: Prod

Migrate TestComplete Automation Workflows to webmate

TestComplete automation migration starts by identifying the browser and app flows that should run through webmate. Remote browser execution, remote device execution, BitBar-backed runs, and Appium-server-based mobile tests can be moved into explicit webmate Selenium or Appium configuration after a short asset inventory.

Start with an Inventory

Before you rewrite any code, inventory the assets that still drive execution:

  • remote browser operations,
  • remote device operations,
  • BitBar-specific configuration,
  • Appium server settings,
  • and any exported manual or keyword assets that still describe the intended flow.

Use the helpers below when you need a quick inventory pass without adding dependencies to the project.

Browser and Device Automation Target State

For browser flows, the target state is a standard remote WebDriver session on the webmate Selenium endpoint:

For mobile flows, the target state is a standard Appium session plus the wm:* capability model:

That final target can be reached from TestComplete remote browser, remote device, BitBar, or Appium-server setups. The migration work is deciding which browser or app flow should move first.

Helper: Convert an Exported Manual-Test File into a Markdown Checklist

This script takes a simple exported HTML or XML file and turns visible list items into a Markdown checklist that can guide a manual verification run in webmate:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
const fs = require('fs');

const source = fs.readFileSync(process.argv[2], 'utf8');
const text = source
  .replace(/<li[^>]*>/gi, '\n- [ ] ')
  .replace(/<\/li>/gi, '')
  .replace(/<[^>]+>/g, ' ')
  .replace(/&nbsp;/g, ' ')
  .replace(/\s+\n/g, '\n')
  .split('\n')
  .map((line) => line.trim())
  .filter(Boolean);

console.log(text.join('\n'));

Use the generated checklist as a starting point only. Review the wording before you use it in a migrated manual test run.

Helper: Inventory Keyword or Operation Names

When you export keyword-driven assets or operation logs, this helper gives you a quick frequency table so you can see which operations still matter:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
const fs = require('fs');

const source = fs.readFileSync(process.argv[2], 'utf8');
const matches = [...source.matchAll(/(?:operation|keyword|name)=["']([^"']+)["']/gi)];
const counts = new Map();

for (const [, name] of matches) {
  counts.set(name, (counts.get(name) || 0) + 1);
}

for (const [name, count] of [...counts.entries()].sort((a, b) => b[1] - a[1])) {
  console.log(`${count}\t${name}`);
}

Treat the output as a migration backlog. Operations that occur most often usually deserve the first reauthored Selenium or Appium helpers.

Mapping the Main TestComplete Paths

TestComplete pathwebmate targetMigration note
Run Remote BrowserSelenium remote session on webmateMove browser choice to browserName, browserVersion, and platformName.
Run Remote DeviceAppium session on webmateMove device choice to wm:model and project context.
BitBar-backed web testsSelenium remote session on webmateRemove BitBar-specific wiring and keep standards-based capabilities.
Appium server setupAppium session on webmate Selenium endpointKeep the Appium logic, replace the server endpoint and vendor metadata.

Reauthor Browser and App Flows

Use the inventory helpers to identify stable behavior first, then reauthor those flows in Selenium, Appium, Playwright, or Cypress according to the target system.

Next Steps