{"_id":"@bloom-perf/yaml-pptr","_rev":"4-ca61215b9817de6ea3b9a0a17a02c1e8","name":"@bloom-perf/yaml-pptr","dist-tags":{"latest":"2.0.2"},"versions":{"1.0.1":{"name":"@bloom-perf/yaml-pptr","version":"1.0.1","keywords":["puppeteer","yaml","testing"],"author":{"name":"Bloom-perf"},"license":"Apache-2.0","_id":"@bloom-perf/yaml-pptr@1.0.1","maintainers":[{"name":"jramette","email":"jerome.ramette@gmail.com"}],"homepage":"https://github.com/Bloom-Perf/yaml-pptr#readme","bugs":{"url":"https://github.com/Bloom-Perf/yaml-pptr/issues"},"dist":{"shasum":"8ed85a17bf22938ac3c28ef836d0d82e4e318d0c","tarball":"https://registry.npmjs.org/@bloom-perf/yaml-pptr/-/yaml-pptr-1.0.1.tgz","fileCount":15,"integrity":"sha512-691kKbYSzbUhPN3+sOlcyBRisUwdQO4vGBuHpjzi30eeq9K8IoV5/ry5FkoXJy6B6loROwJMALWAsnumrrZKew==","signatures":[{"sig":"MEUCIBBKI8XbWMrH9sOeVIx8CxOFmb935u3IYprU90T6vJ+JAiEA4ZKbvYghy5A7N+vhkQGvFN3aFLXW/6aZfUdrH4d3SkM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bloom-perf%2fyaml-pptr@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":57766},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"1e8e9255fa68777b00ab7025f1351890b03b49da","scripts":{"test":"mocha --loader ts-node/esm -r ts-node/register test/**/*.spec.ts","build":"rm -rf dist && node esbuild.js && tsc","example:load":"tsx examples/load-test/run.ts","example:login":"tsx examples/login-demo/run.ts","test:coverage":"c8 npm run test"},"_npmUser":{"name":"jramette","email":"jerome.ramette@gmail.com"},"repository":{"url":"git+https://github.com/Bloom-Perf/yaml-pptr.git","type":"git"},"_npmVersion":"11.6.2","description":"A library to generate puppeteer browser controls through a YAML api.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"zod":"^4.0.0","js-yaml":"^4.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"c8":"10.1.3","tsx":"4.21.0","chai":"6.2.2","mocha":"11.7.5","esbuild":"0.27.2","ts-node":"10.9.2","prettier":"3.8.1","cross-env":"10.1.0","puppeteer":"24.36.1","ts-mockito":"2.6.1","typescript":"5.9.3","@types/chai":"5.2.3","@types/mocha":"10.0.10","@types/js-yaml":"4.0.9","@testdeck/mocha":"0.3.3","esbuild-node-externals":"1.20.1"},"_npmOperationalInternal":{"tmp":"tmp/yaml-pptr_1.0.1_1770038425220_0.4073751777979173","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@bloom-perf/yaml-pptr","version":"2.0.0","keywords":["puppeteer","yaml","testing"],"author":{"name":"Bloom-perf"},"license":"Apache-2.0","_id":"@bloom-perf/yaml-pptr@2.0.0","maintainers":[{"name":"jramette","email":"jerome.ramette@gmail.com"}],"homepage":"https://github.com/Bloom-Perf/yaml-pptr#readme","bugs":{"url":"https://github.com/Bloom-Perf/yaml-pptr/issues"},"dist":{"shasum":"a2f1b25894bb392227ded088e8824e006b3018c9","tarball":"https://registry.npmjs.org/@bloom-perf/yaml-pptr/-/yaml-pptr-2.0.0.tgz","fileCount":15,"integrity":"sha512-ZdS4NvpG7jgglCoNqiCD1cLTf2umcRz79UQpkX7IS7FR0CU0PH2jTBr26AjgWs0V+APTSQBfixgF4PPbbl84gg==","signatures":[{"sig":"MEQCIH7Mtf2jP5nVMPIC3udkw1B0/1Yi0hpo9q5BwO+yxNe6AiAQObz049u9uqu9d4Z1k6TBKC76A9kaYWsgdrYbXYjWCQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bloom-perf%2fyaml-pptr@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":58317},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"7c1c14414a2d89ad9d0678e24282d14b7810ae19","scripts":{"test":"mocha --loader ts-node/esm -r ts-node/register test/**/*.spec.ts","build":"rm -rf dist && node esbuild.js && tsc","example:load":"tsx examples/load-test/run.ts","example:login":"tsx examples/login-demo/run.ts","test:coverage":"c8 npm run test"},"_npmUser":{"name":"jramette","email":"jerome.ramette@gmail.com"},"repository":{"url":"git+https://github.com/Bloom-Perf/yaml-pptr.git","type":"git"},"_npmVersion":"11.9.0","description":"A library to generate puppeteer browser controls through a YAML api.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^4.0.0","js-yaml":"^4.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","tsx":"4.21.0","chai":"6.2.2","mocha":"11.7.5","esbuild":"0.27.3","ts-node":"10.9.2","prettier":"3.8.1","cross-env":"10.1.0","puppeteer":"24.38.0","ts-mockito":"2.6.1","typescript":"5.9.3","@types/chai":"5.2.3","@types/mocha":"10.0.10","@types/js-yaml":"4.0.9","@testdeck/mocha":"0.3.3","esbuild-node-externals":"1.20.1"},"_npmOperationalInternal":{"tmp":"tmp/yaml-pptr_2.0.0_1772979163528_0.02917810670718235","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@bloom-perf/yaml-pptr","version":"2.0.1","keywords":["puppeteer","yaml","testing"],"author":{"name":"Bloom-perf"},"license":"Apache-2.0","_id":"@bloom-perf/yaml-pptr@2.0.1","maintainers":[{"name":"jramette","email":"jerome.ramette@gmail.com"}],"homepage":"https://www.npmjs.com/package/@bloom-perf/yaml-pptr","bugs":{"url":"https://github.com/Bloom-Perf/yaml-pptr/issues"},"dist":{"shasum":"3ce2cfde56ece8cface606e80b8754676fd573b6","tarball":"https://registry.npmjs.org/@bloom-perf/yaml-pptr/-/yaml-pptr-2.0.1.tgz","fileCount":11,"integrity":"sha512-TBTj2t2yGET6CWhowv2D2Pmg7Q9t5od1adbddFHa1O1alAwpPu6LD5Slvzgtn2i4JVLJOp7QAJdppdKmxuAuNQ==","signatures":[{"sig":"MEUCICsvfaz7EeFTNsm0Tev8B6KoM6Pg86bsMIdK7cvLb6p+AiEAudmqpD4sT1iQQrO+X+GEn6UEQqQgD3An6m74m+D8MW8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bloom-perf%2fyaml-pptr@2.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":58443},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"dc1f0bc3e102e84547dd5a38d711097151ec8220","scripts":{"test":"mocha --loader ts-node/esm -r ts-node/register test/**/*.spec.ts","build":"rm -rf dist && node esbuild.js && tsc -p tsconfig.build.json","example:load":"tsx examples/load-test/run.ts","example:login":"tsx examples/login-demo/run.ts","test:coverage":"c8 npm run test"},"_npmUser":{"name":"jramette","email":"jerome.ramette@gmail.com"},"repository":{"url":"git+https://github.com/Bloom-Perf/yaml-pptr.git","type":"git"},"_npmVersion":"11.9.0","description":"A library to generate puppeteer browser controls through a YAML api.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^4.0.0","js-yaml":"^4.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"c8":"11.0.0","tsx":"4.21.0","chai":"6.2.2","mocha":"11.7.5","esbuild":"0.27.3","ts-node":"10.9.2","prettier":"3.8.1","cross-env":"10.1.0","puppeteer":"24.38.0","ts-mockito":"2.6.1","typescript":"5.9.3","@types/chai":"5.2.3","@types/mocha":"10.0.10","@types/js-yaml":"4.0.9","@testdeck/mocha":"0.3.3","esbuild-node-externals":"1.20.1"},"_npmOperationalInternal":{"tmp":"tmp/yaml-pptr_2.0.1_1772984599170_0.19829015259399463","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"@bloom-perf/yaml-pptr","version":"2.0.2","description":"A library to generate puppeteer browser controls through a YAML api.","type":"module","main":"dist/index.js","types":"dist/index.d.ts","devDependencies":{"@testdeck/mocha":"0.3.3","@types/chai":"5.2.3","@types/js-yaml":"4.0.9","@types/mocha":"10.0.10","c8":"11.0.0","chai":"6.2.2","cross-env":"10.1.0","esbuild":"0.27.3","esbuild-node-externals":"1.20.1","mocha":"11.7.5","prettier":"3.8.1","puppeteer":"24.38.0","ts-mockito":"2.6.1","ts-node":"10.9.2","tsx":"4.21.0","typescript":"5.9.3"},"dependencies":{"js-yaml":"^4.1.0","zod":"^4.0.0"},"scripts":{"build":"rm -rf dist && node esbuild.js && tsc -p tsconfig.build.json","test":"mocha --loader ts-node/esm -r ts-node/register test/**/*.spec.ts","test:coverage":"c8 npm run test","example:login":"tsx examples/login-demo/run.ts","example:load":"tsx examples/load-test/run.ts"},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/Bloom-Perf/yaml-pptr.git"},"keywords":["puppeteer","yaml","testing"],"author":{"name":"Bloom-perf"},"license":"Apache-2.0","bugs":{"url":"https://github.com/Bloom-Perf/yaml-pptr/issues"},"homepage":"https://www.npmjs.com/package/@bloom-perf/yaml-pptr","gitHead":"54f1795107fd705bd33cda5b091eaedfd6b4d088","_id":"@bloom-perf/yaml-pptr@2.0.2","_nodeVersion":"24.14.0","_npmVersion":"11.9.0","dist":{"integrity":"sha512-/l2M2HMb7ZUcBJlQo2qRMQ3EfLfzGfbaMgRqhdLpK/X3vhbdXzeBk31FF0I4CLLDDGDdbwP3YfdwPhvJin9ulQ==","shasum":"9741d7b304ce1e6d2a803f3a9a1faba8d49afbed","tarball":"https://registry.npmjs.org/@bloom-perf/yaml-pptr/-/yaml-pptr-2.0.2.tgz","fileCount":11,"unpackedSize":57770,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bloom-perf%2fyaml-pptr@2.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIH1cH9M2g8kurZ35BO2JIJ4t2Bj3oJ+mNibSgWhQqBKnAiEA/s5dbO3V3rX8I8HrY5qrXkMpQa6SAgKaNjzSFt/L6ww="}]},"_npmUser":{"name":"jramette","email":"jerome.ramette@gmail.com"},"directories":{},"maintainers":[{"name":"jramette","email":"jerome.ramette@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/yaml-pptr_2.0.2_1773062887133_0.8541686141373701"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-02T13:20:25.112Z","modified":"2026-03-09T13:28:07.618Z","1.0.1":"2026-02-02T13:20:25.368Z","2.0.0":"2026-03-08T14:12:43.675Z","2.0.1":"2026-03-08T15:43:19.315Z","2.0.2":"2026-03-09T13:28:07.292Z"},"bugs":{"url":"https://github.com/Bloom-Perf/yaml-pptr/issues"},"author":{"name":"Bloom-perf"},"license":"Apache-2.0","homepage":"https://www.npmjs.com/package/@bloom-perf/yaml-pptr","keywords":["puppeteer","yaml","testing"],"repository":{"type":"git","url":"git+https://github.com/Bloom-Perf/yaml-pptr.git"},"description":"A library to generate puppeteer browser controls through a YAML api.","maintainers":[{"name":"jramette","email":"jerome.ramette@gmail.com"}],"readme":"# yaml-pptr\n\n[![npm version](https://img.shields.io/npm/v/@bloom-perf/yaml-pptr?style=flat&logo=npm)](https://www.npmjs.com/package/@bloom-perf/yaml-pptr)\n[![GitHub last commit](https://img.shields.io/github/last-commit/bloom-perf/yaml-pptr?logo=github)](https://github.com/bloom-perf/yaml-pptr)\n[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/bloom-perf/yaml-pptr/ci.yml?style=flat&branch=main)](https://github.com/Bloom-Perf/yaml-pptr/actions)\n[![GitHub release](https://img.shields.io/github/v/release/bloom-perf/yaml-pptr?style=flat)](https://github.com/Bloom-Perf/yaml-pptr/releases)\n[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg?style=flat)](https://opensource.org/licenses/Apache-2.0)\n\n**yaml-pptr** is a library that allows you to control web browsers using Puppeteer by defining your scenarios in YAML. No more verbose Puppeteer scripts - just simple, human-readable configuration files.\n\n## Installation\n\n```bash\nnpm install @bloom-perf/yaml-pptr\n```\n\n## Quick Start\n\n```typescript\nimport { readYamlAndInterpret } from '@bloom-perf/yaml-pptr';\n\nconst yaml = `\nscenarios:\n  - name: Login Test\n    location: \"https://www.saucedemo.com\"\n    steps:\n      - input:\n          selector: \"#user-name\"\n          text: \"standard_user\"\n      - input:\n          selector: \"#password\"\n          text: \"secret_sauce\"\n      - click: \"#login-button\"\n      - wait: 2\n`;\n\nreadYamlAndInterpret(yaml);\n```\n\n## Examples\n\nReady-to-run examples are available in the [`examples/`](./examples) directory:\n\n```bash\nnpm run example:login   # Login test with screenshot\nnpm run example:load    # Load test (3 workers × 2 iterations)\n```\n\n## Getting Started\n\n### Project Structure\n\n```\nmy-automation/\n├── scenarios/\n│   └── login-test.yaml\n├── src/\n│   └── runner.ts\n├── package.json\n└── tsconfig.json\n```\n\n### 1. Create a YAML scenario\n\n**scenarios/login-test.yaml**\n\n```yaml\nscenarios:\n  - name: Sauce Demo Login\n    location: \"https://www.saucedemo.com\"\n    steps:\n      - input:\n          selector: \"#user-name\"\n          text: \"standard_user\"\n      - input:\n          selector: \"#password\"\n          text: \"secret_sauce\"\n      - click: \"#login-button\"\n      - wait: 2\n    actions:\n      - type: WAIT_FOR_SELECTOR\n        selector: \".inventory_list\"\n        options:\n          visible: true\n      - type: SCREENSHOT\n        path: \"screenshots/result.png\"\n        options:\n          fullPage: true\n```\n\n### 2. Create a runner script\n\n**src/runner.ts**\n\n```typescript\nimport { readYamlAndInterpret } from '@bloom-perf/yaml-pptr';\nimport * as fs from 'fs';\n\nconst yaml = fs.readFileSync('./scenarios/login-test.yaml', 'utf-8');\n\nfs.mkdirSync('./screenshots', { recursive: true });\n\nreadYamlAndInterpret(yaml)\n  .then(() => console.log('Done!'))\n  .catch(console.error);\n```\n\n### 3. Run it\n\n```bash\nnpx ts-node src/runner.ts\n```\n\n## YAML Reference\n\n### Scenario Configuration\n\n| Property | Type | Default | Description |\n| -------- | ---- | ------- | ----------- |\n| `name` | string | `Scenario N` | Scenario name |\n| `browser` | `chrome` \\| `firefox` | `chrome` | Browser to use |\n| `run` | `PARALLEL` \\| `SEQUENTIAL` | `PARALLEL` | Worker start strategy |\n| `initialDelaySeconds` | number | `0` | Delay before starting |\n| `workers` | number | `1` | Number of parallel workers |\n| `iterations` | number | `1` | Repetitions per worker |\n| `location` | string | - | Starting URL |\n| `steps` | array | - | Simplified syntax |\n| `actions` | array | - | Full syntax with options |\n\n### Steps (Simplified Syntax)\n\n#### click\n\n```yaml\n- click: \"#submit-button\"\n```\n\n#### input\n\n```yaml\n- input:\n    selector: \"#username\"\n    text: \"myuser\"\n```\n\n#### navigate\n\n```yaml\n- navigate: \"http://example.com\"\n- navigate: \"$ENV_VAR\"\n```\n\n#### wait\n\n```yaml\n- wait: 3  # seconds\n```\n\n#### waitForever\n\n```yaml\n- waitForever\n```\n\n### Actions (Full Syntax)\n\nUse `actions` instead of `steps` when you need advanced options.\n\n#### GOTO\n\n```yaml\n- type: GOTO\n  url: \"http://example.com\"\n  options:\n    timeout: 30000\n    waitUntil: networkidle0  # load | domcontentloaded | networkidle0 | networkidle2\n    referer: \"http://referrer.com\"\n```\n\n#### CLICK\n\n```yaml\n- type: CLICK\n  selector: \"#button\"\n  options:\n    button: left     # left | right | middle\n    clickCount: 2    # double-click\n    delay: 100       # ms between mousedown/mouseup\n```\n\n#### TYPE\n\n```yaml\n- type: TYPE\n  selector: \"#input\"\n  text: \"Hello\"\n  options:\n    delay: 50  # ms between keystrokes\n```\n\n#### WAIT\n\n```yaml\n- type: WAIT\n  milliseconds: 2000\n```\n\n#### WAIT_FOR_SELECTOR\n\n```yaml\n- type: WAIT_FOR_SELECTOR\n  selector: \".loaded\"\n  options:\n    visible: true\n    hidden: false\n    timeout: 5000\n```\n\n#### WAIT_FOR_TIMEOUT\n\n```yaml\n- type: WAIT_FOR_TIMEOUT\n  timeout: 1000\n```\n\n#### SCREENSHOT\n\n```yaml\n- type: SCREENSHOT\n  path: \"screenshot.png\"\n  options:\n    type: png          # png | jpeg\n    quality: 80        # jpeg quality (0-100)\n    fullPage: true\n    omitBackground: false\n    encoding: binary   # binary | base64\n    clip:\n      x: 0\n      y: 0\n      width: 800\n      height: 600\n```\n\n#### EVALUATE\n\n```yaml\n- type: EVALUATE\n  script: \"document.title\"\n```\n\n#### SET_VIEWPORT\n\n```yaml\n- type: SET_VIEWPORT\n  width: 1920\n  height: 1080\n```\n\n#### PAUSE\n\n```yaml\n- type: PAUSE  # Press Enter to continue\n```\n\n#### CLOSE\n\n```yaml\n- type: CLOSE\n```\n\n## Environment Variables\n\nUse `$VAR_NAME` syntax in `location` or `navigate`:\n\n```yaml\nlocation: \"$BASE_URL\"\n```\n\n```bash\nBASE_URL=https://example.com npx ts-node runner.ts\n```\n\n### Indexed Variables\n\nAssign different values to each worker using `$VAR[workerIndex]`:\n\n```yaml\nscenarios:\n  - name: Multi-URL Test\n    workers: 3\n    location: \"$URLS[workerIndex]\"\n    steps:\n      - wait: 2\n```\n\n```bash\nURLS=\"https://site1.com,https://site2.com,https://site3.com\" npx ts-node runner.ts\n```\n\nWorker 0 gets `site1.com`, worker 1 gets `site2.com`, etc.\n\n## Load Testing Example\n\n```yaml\nscenarios:\n  - name: Load Test\n    run: PARALLEL\n    workers: 10\n    iterations: 5\n    location: \"https://example.com\"\n    steps:\n      - click: \"#action-button\"\n      - wait: 1\n```\n\nThis runs 10 workers in parallel, each executing the scenario 5 times.\n\n## Development\n\n```bash\n# Run tests\nnpm test\n\n# Run tests with coverage\nnpm run test:coverage\n\n# Build\nnpm run build\n```\n\n## Contributing\n\nContributions are welcome! Please open an issue or submit a pull request.\n\n## License\n\n[Apache 2.0](https://opensource.org/licenses/Apache-2.0)\n","readmeFilename":"README.md"}