probe-convert
probe-convert is a standalone multi-format test converter that translates tests from 7 source formats into ProbeScript with 100% construct coverage across all supported languages.
Supported Formats
Section titled “Supported Formats”| Source Framework | Extensions | Constructs | Full | Partial |
|---|---|---|---|---|
| Maestro | .yaml, .yml | 26 | 24 | 2 |
| Gherkin (Cucumber) | .feature | 34 | 34 | 0 |
| Robot Framework | .robot | 29 | 28 | 1 |
| Detox | .js, .ts | 22 | 22 | 0 |
| Appium (Python) | .py | 14 | 13 | 1 |
| Appium (Java) | .java, .kt | 12 | 12 | 0 |
| Appium (JS/WebdriverIO) | .js | 13 | 13 | 0 |
Installation
Section titled “Installation”make build-convert # from repo root, outputs bin/probe-convertConvert a single file
Section titled “Convert a single file”bin/probe-convert tests/login.yamlFormat is auto-detected from file extension and content markers.
Convert a directory
Section titled “Convert a directory”bin/probe-convert -r maestro_tests/ -o probe_tests/Force a source format
Section titled “Force a source format”bin/probe-convert --from maestro flow.ymlPreview without writing
Section titled “Preview without writing”bin/probe-convert --dry-run tests/login.yamlConvert and validate
Section titled “Convert and validate”# Validate with probe lintbin/probe-convert --lint tests/login.yaml -o output/
# Validate with probe test --dry-runbin/probe-convert --verify tests/login.yaml -o output/Conversion Levels
Section titled “Conversion Levels”- Full — Lossless 1:1 mapping (e.g.,
tapOnbecomestap on) - Partial — Lossy but valid ProbeScript with guidance comments (e.g.,
evalScriptbecomes arun dart:block)
No constructs remain at Manual level — all have been promoted to Full or Partial.
Examples
Section titled “Examples”Maestro YAML to ProbeScript
Section titled “Maestro YAML to ProbeScript”# login.yaml (Maestro)appId: com.example.app---- launchApp- tapOn: "Sign In"- inputText: "user@test.com"- assertVisible: "Dashboard"Becomes:
test "login" open the app tap on "Sign In" type "user@test.com" see "Dashboard"Gherkin to ProbeScript
Section titled “Gherkin to ProbeScript”Feature: Login Background: Given the app is launched Scenario: Valid login When I tap on "Sign In" Then I should see "Dashboard"Becomes:
before each open the app
test "Valid login" tap on "Sign In" see "Dashboard"Detox JS to ProbeScript
Section titled “Detox JS to ProbeScript”describe('Login', () => { it('should sign in', async () => { await element(by.id('email')).typeText('user@test.com'); await element(by.text('Sign In')).tap(); await expect(element(by.text('Dashboard'))).toBeVisible(); });});Becomes:
test "should sign in" type "user@test.com" into #email tap on "Sign In" see "Dashboard"Grammar Catalog
Section titled “Grammar Catalog”View the formal construct catalog for any language:
bin/probe-convert catalog # summary tablebin/probe-convert catalog maestro # full Maestro catalogbin/probe-convert catalog gherkin # full Gherkin catalogbin/probe-convert catalog --markdown # Markdown outputCLI Flags
Section titled “CLI Flags”| Flag | Description |
|---|---|
--from, -f | Force source format (maestro, gherkin, robot, detox, appium) |
--output, -o | Output directory or file |
--dry-run | Preview to stdout |
--recursive, -r | Recurse into subdirectories |
--lint | Validate with probe lint after conversion |
--verify | Validate with probe test --dry-run after conversion |
--probe-path | Path to probe binary (auto-detected) |
Format Auto-Detection
Section titled “Format Auto-Detection”The converter guesses format from file extension and content:
.featuremaps to Gherkin,.robotmaps to Robot Framework.yaml/.ymlmaps to Maestro if it containsappId,tapOn,launchApp, etc..js/.tsmaps to Detox if it containselement(by.ordevice.launchApp, otherwise Appium JS.pymaps to Appium Python.java/.ktmaps to Appium Java