{"id":42932525,"url":"https://github.com/javierlopezdeancos/testcontainers-node-playwright","last_synced_at":"2026-01-30T19:08:32.661Z","repository":{"id":228461187,"uuid":"774040878","full_name":"javierlopezdeancos/testcontainers-node-playwright","owner":"javierlopezdeancos","description":"Playwright module for testcontainers-node","archived":false,"fork":false,"pushed_at":"2025-02-14T21:33:50.000Z","size":258,"stargazers_count":8,"open_issues_count":3,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-09-20T06:59:59.991Z","etag":null,"topics":["docker","end-to-end-testing","playwright","testcontainers","testcontainers-module","testcontainers-node"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/javierlopezdeancos.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2024-03-18T20:54:21.000Z","updated_at":"2025-05-21T17:25:55.000Z","dependencies_parsed_at":"2024-04-18T15:57:21.073Z","dependency_job_id":"10262bdf-9275-4837-8c12-36cd5a7eb1e7","html_url":"https://github.com/javierlopezdeancos/testcontainers-node-playwright","commit_stats":null,"previous_names":["javierlopezdeancos/testcontainers-node-playwright"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/javierlopezdeancos/testcontainers-node-playwright","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javierlopezdeancos%2Ftestcontainers-node-playwright","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javierlopezdeancos%2Ftestcontainers-node-playwright/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javierlopezdeancos%2Ftestcontainers-node-playwright/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javierlopezdeancos%2Ftestcontainers-node-playwright/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/javierlopezdeancos","download_url":"https://codeload.github.com/javierlopezdeancos/testcontainers-node-playwright/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javierlopezdeancos%2Ftestcontainers-node-playwright/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28917479,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-30T16:37:38.804Z","status":"ssl_error","status_checked_at":"2026-01-30T16:37:37.878Z","response_time":66,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","end-to-end-testing","playwright","testcontainers","testcontainers-module","testcontainers-node"],"created_at":"2026-01-30T19:08:29.008Z","updated_at":"2026-01-30T19:08:32.651Z","avatar_url":"https://github.com/javierlopezdeancos.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# testcontainers-node-playwright\n\n[![Test](https://github.com/javierlopezdeancos/testcontainers-node-playwright/actions/workflows/test.yml/badge.svg?branch=main)](https://github.com/javierlopezdeancos/testcontainers-node-playwright/actions/workflows/test.yml)\n![NPM Version](https://img.shields.io/npm/v/testcontainers-node-playwright)\n![GitHub License](https://img.shields.io/github/license/javierlopezdeancos/testcontainers-node-playwright)\n\n![Testcontainers logo](https://avatars.githubusercontent.com/u/13393021?s=48\u0026v=4)\n\u003cimg src=\"https://playwright.dev/img/playwright-logo.svg\" alt=\"playwright logo\" width=\"50\"/\u003e\n\nPlaywright module for [Testcontainers](https://testcontainers.com/)\n\n[Playwright](https://playwright.dev/) is an [open source](https://github.com/microsoft/playwright) Microsoft\n**end-to-end testing tool for modern web apps**. You can review the\nPlaywright documentation in the [Playwright official site](https://playwright.dev/docs/intro).\n\n- [Features Implemented](#features-implemented)\n- [Installation](#installation)\n- [Example hello world app test helper](#example-hello-world-app-test)\n- [How to use](#how-to-use)\n  - [Start a playwright container](#start-a-playwright-container)\n  - [Execute test in a Playwright container](#execute-test-in-a-playwright-container)\n  - [Reporter](#reporter)\n    - [Execute tests in a playwright container and read the dot reporter output](#execute-tests-in-a-playwright-container-and-read-the-dot-reporter-output)\n    - [Execute tests in a playwright container and read the line reporter output](#execute-tests-in-a-playwright-container-and-read-the-line-reporter-output)\n    - [Execute tests in a playwright container with default configuration and extract a html reporter with results](#execute-tests-in-a-playwright-container-with-default-configuration-and-extract-a-html-reporter-with-results)\n    - [Execute tests in a playwright container with default configuration and extract a json reporter with results](#execute-tests-in-a-playwright-container-with-default-configuration-and-extract-a-json-reporter-with-results)\n    - [Execute tests in a playwright container with default configuration and extract a blob reporter with results](#execute-tests-in-a-playwright-container-with-default-configuration-and-extract-a-blob-reporter-with-results)\n    - [Execute tests in a playwright container with default configuration and extract a junit reporter with results](#execute-tests-in-a-playwright-container-with-default-configuration-and-extract-a-junit-reporter-with-results)\n  - [Trace viewer](#trace-viewer)\n    - [Execute tests in a playwright container with default configuration that should fail and extract the trace viewer zip file](#execute-tests-in-a-playwright-container-with-default-configuration-that-should-fail-and-extract-the-trace-viewer-zip-file)\n  - [Run playwright tests pointed to your app](#run-playwright-tests-pointed-to-your-app)\n    - [Run playwright tests in a playwright container pointed to your app container](#run-playwright-tests-in-a-playwright-container-pointer-to-your-your-app-container)\n      - [Pointed to our hello world app example](#pointed-to-our-hello-world-app-example)\n\n## Features Implemented\n\n- Run Playwright tests in a playwright container.\n  - [x] Run all Playwright tests in a playwright container.\n  - [x] Run specific tests file in a playwright container.\n  - [ ] Run specific tests in a playwright container.\n- Run Playwright tests in a playwright container and extract the reporter results.\n  - [x] Run Playwright tests in a playwright container and read the output line reporter.\n  - [x] Run Playwright tests in a playwright container and read the output dot reporter.\n  - [x] Run Playwright tests in a playwright container with default configuration and extract the html reporter.\n  - [ ] Run Playwright tests in a playwright container with default configuration and open the html reporter.\n  - [x] Run Playwright tests in a playwright container with default configuration and extract the json reporter.\n  - [x] Run Playwright tests in a playwright container with default configuration and extract the junit reporter.\n  - [x] Run Playwright tests in a playwright container with default configuration and extract the blob reporter.\n  - [ ] Run Playwright tests in a playwright container with default configuration and extract a list of\n        different reporters.\n- Run Playwright tests pointed to your app.\n  - [x] Run Playwright tests in a playwright container pointed to your app container.\n- Run Playwright test in UI mode.\n  - [ ] Run Tests in UI Mode that user can follow up outside the container using a browser.\n- Run Playwright and extract trace viewer on failed test.\n  - [x] Run Playwright tests in a playwright container with default configuration that should fail and extract the\n        trace viewer zip file.\n- Debugging Playwright tests.\n  - [ ] Debugging Playwright tests with the Playwright inspector in a Playwright container.\n\n## Installation\n\n\n```bash\nnpm install testcontainers-node-playwright --save-dev\n```\n\n## Example hello world app test\n\nWe have some helpers that allow us the testing module strategy.\n\n```text\n.\n└── testcontainers-node-playwright/\n    └── src/\n        └── example-hello-world-app-tests/\n\n```\n\nA project generated by playwright cli that allow all infrastructure to run playwright test.\nThis project will be the one that will be mounted into the playwright container to execute its tests\npointed to `example-hello-world-app`\n\n## How to use\n\n### Start a playwright container\n\nPlaywright has official docker images in the [Microsoft Artifact Registry](https://mcr.microsoft.com/en-us/product/playwright/about)\nthat you can review to choose a tag.\n\n```typescript\nimport path from \"path\";\nimport { PlaywrightContainer } from \"testcontainers-node-playwright\";\n\nconst PLAYWRIGHT_IMAGE = \"mcr.microsoft.com/playwright:v1.44.0-jammy\";\nconst PLAYWRIGHT_PROJECT_TESTS_TO_RUN_INTO_THE_CONTAINER = path.resolve(__dirname, \"..\", \"example-project\");\n\nconst startedPlaywrightContainer = await new PlaywrightContainer(\n  PLAYWRIGHT_IMAGE,\n  PLAYWRIGHT_PROJECT_TESTS_TO_RUN_INTO_THE_CONTAINER,\n).start();\n```\n\n### Execute test in a playwright container\n\n```typescript\nconst { output, exitCode } = await startedPlaywrightContainer.exec([\"npx\", \"playwright\", \"test\"]);\n```\n\n### Reporter\n\nReview the [Playwright reporter documentation](https://playwright.dev/docs/test-reporters) in order to know the available reporters and how you can notify\nplaywright which should be run and how.\nPlaywright has two different kind of reporters, the built-in reporters _(line, dot)_ and the external reporters\n_(html, json, junit, blob)_.\nYou can set which reporter and how to run it, configuring the `playwright.config.js` file in your project.\nTo extract the reporter generated by our tests, you can use the `saveReporter` method from the `PlaywrightContainer`\nclass passing the type of reporter to extract and where do you want to extract it .\n\n#### Execute tests in a playwright container and read the dot reporter output\n\n```typescript\nimport path from \"path\";\nimport { PlaywrightContainer } from \"testcontainers-node-playwright\";\n\nconst PLAYWRIGHT_IMAGE = \"mcr.microsoft.com/playwright:v1.44.0-jammy\";\nconst PLAYWRIGHT_PROJECT_TESTS_TO_RUN_INTO_THE_CONTAINER = path.resolve(__dirname, \"..\", \"example-project\");\n\nconst startedPlaywrightContainer = await new PlaywrightContainer(\n  PLAYWRIGHT_IMAGE,\n  PLAYWRIGHT_PROJECT_TESTS_TO_RUN_INTO_THE_CONTAINER,\n).start();\n\nconst { output, exitCode } = await startedPlaywrightContainer.exec([\n  \"npx\",\n  \"playwright\",\n  \"test\",\n  \"--reporter=dot\",\n]);\n```\n\n#### Execute tests in a playwright container and read the line reporter output\n\n```typescript\nimport path from \"path\";\nimport { PlaywrightContainer } from \"testcontainers-node-playwright\";\n\nconst PLAYWRIGHT_IMAGE = \"mcr.microsoft.com/playwright:v1.44.0-jammy\";\nconst PLAYWRIGHT_PROJECT_TESTS_TO_RUN_INTO_THE_CONTAINER = path.resolve(__dirname, \"..\", \"example-project\");\n\nconst startedPlaywrightContainer = await new PlaywrightContainer(\n  PLAYWRIGHT_IMAGE,\n  PLAYWRIGHT_PROJECT_TESTS_TO_RUN_INTO_THE_CONTAINER,\n).start();\n\nconst { output, exitCode } = await startedPlaywrightContainer.exec([\n  \"npx\",\n  \"playwright\",\n  \"test\",\n  \"--reporter=line\",\n]);\n```\n\n#### Execute tests in a playwright container with default configuration and extract a html reporter with results\n\n```typescript\nimport path from \"path\";\nimport { PlaywrightContainer } from \"testcontainers-node-playwright\";\n\nconst PLAYWRIGHT_IMAGE = \"mcr.microsoft.com/playwright:v1.44.0-jammy\";\nconst PLAYWRIGHT_PROJECT_TESTS_TO_RUN_INTO_THE_CONTAINER = path.resolve(__dirname, \"..\", \"example-project\");\nconst PLAYWRIGHT_SAVE_REPORTS_DIRECTORY = path.resolve(__dirname, \"..\", \"example-reports\");\n\nconst externalDestinationReporterPath = path.resolve(PLAYWRIGHT_SAVE_REPORTS_DIRECTORY, \"index.html\");\n\nconst startedPlaywrightContainer = await new PlaywrightContainer(\n  PLAYWRIGHT_IMAGE,\n  PLAYWRIGHT_PROJECT_TESTS_TO_RUN_INTO_THE_CONTAINER,\n).start();\n\nconst { output, exitCode } = await startedPlaywrightContainer.exec([\"npx\", \"playwright\", \"test\", \"--reporter=html\"]);\n\nawait startedPlaywrightContainer.saveReporter(\"html\", externalDestinationReporterPath);\n```\n\n#### Execute tests in a playwright container with default configuration and extract a json reporter with results\n\n```typescript\nimport path from \"path\";\nimport { PlaywrightContainer } from \"testcontainers-node-playwright\";\n\nconst PLAYWRIGHT_IMAGE = \"mcr.microsoft.com/playwright:v1.44.0-jammy\";\nconst PLAYWRIGHT_PROJECT_TESTS_TO_RUN_INTO_THE_CONTAINER = path.resolve(__dirname, \"..\", \"example-project\");\nconst PLAYWRIGHT_SAVE_REPORTS_DIRECTORY = path.resolve(__dirname, \"..\", \"example-reports\");\n\nconst externalDestinationReporterPath = path.resolve(PLAYWRIGHT_SAVE_REPORTS_DIRECTORY, \"index.html\");\n\nconst startedPlaywrightContainer = await new PlaywrightContainer(\n  PLAYWRIGHT_IMAGE,\n  PLAYWRIGHT_PROJECT_TESTS_TO_RUN_INTO_THE_CONTAINER,\n).start();\n\nconst { output, exitCode } = await startedPlaywrightContainer.exec([\"npx\", \"playwright\", \"test\", \"--reporter=json\"]);\n\nawait startedPlaywrightContainer.saveReporter(\"json\", externalDestinationReporterPath);\n```\n\n#### Execute tests in a Playwright container with default configuration and extract a blob reporter with results\n\nThis functionality get some changes from [v1.44.0](https://github.com/javierlopezdeancos/testcontainers-node-playwright/pull/7#:~:text=at%20the%20changelog-,v1.44.0,-to%20the%20new) version or Playwright that introduce the blob report filename generation automatically adding a hash.\n\nYou can read more about in the official [blob-reporter](https://playwright.dev/docs/test-reporters#blob-reporter) playwright documentation section.\n\nThose changes are reflected in the [PR #7](https://github.com/javierlopezdeancos/testcontainers-node-playwright/pull/7), taking a a workaround to get the blob reporter output filename for now, but that obviously will be removed in the future.\n\n\u003e [!CAUTION]\n\u003e This approach implies that you need to set the `PLAYWRIGHT_BLOB_OUTPUT_NAME` environment variable in the container with the name of the blob output file that you want to generate to be fixed and recoverable without need to read any `report-{hash}.zip` filename.\n\n```typescript\nimport path from \"path\";\nimport { PlaywrightContainer } from \"testcontainers-node-playwright\";\n\nconst PLAYWRIGHT_IMAGE = \"mcr.microsoft.com/playwright:v1.44.0-jammy\";\nconst PLAYWRIGHT_PROJECT_TESTS_TO_RUN_INTO_THE_CONTAINER = path.resolve(__dirname, \"..\", \"example-project\");\nconst PLAYWRIGHT_SAVE_REPORTS_DIRECTORY = path.resolve(__dirname, \"..\", \"example-reports\");\n\nconst externalDestinationReporterPath = path.resolve(PLAYWRIGHT_SAVE_REPORTS_DIRECTORY, \"index.html\");\n\nconst startedPlaywrightContainer = await new PlaywrightContainer(\n  PLAYWRIGHT_IMAGE,\n  PLAYWRIGHT_PROJECT_TESTS_TO_RUN_INTO_THE_CONTAINER\n)\n.withEnvironment({ PLAYWRIGHT_BLOB_OUTPUT_NAME: \"report.zip\" })\n.start();\n\nconst { output, exitCode } = await startedPlaywrightContainer.exec([\"npx\", \"playwright\", \"test\", \"--reporter=blob\"]);\n\nawait startedPlaywrightContainer.saveReporter(\"blob\", externalDestinationReporterPath);\n```\n\n#### Execute tests in a Playwright container with default configuration and extract a junit reporter with results\n\n```typescript\nimport path from \"path\";\nimport { PlaywrightContainer } from \"testcontainers-node-playwright\";\n\nconst PLAYWRIGHT_IMAGE = \"mcr.microsoft.com/playwright:v1.44.0-jammy\";\nconst PLAYWRIGHT_PROJECT_TESTS_TO_RUN_INTO_THE_CONTAINER = path.resolve(__dirname, \"..\", \"example-project\");\nconst PLAYWRIGHT_SAVE_REPORTS_DIRECTORY = path.resolve(__dirname, \"..\", \"example-reports\");\n\nconst externalDestinationReporterPath = path.resolve(PLAYWRIGHT_SAVE_REPORTS_DIRECTORY, \"index.html\");\n\nconst startedPlaywrightContainer = await new PlaywrightContainer(\n  PLAYWRIGHT_IMAGE,\n  PLAYWRIGHT_PROJECT_TESTS_TO_RUN_INTO_THE_CONTAINER,\n).start();\n\nconst { output, exitCode } = await startedPlaywrightContainer.exec([\"npx\", \"playwright\", \"test\", \"--reporter=junit\"]);\n\nawait startedPlaywrightContainer.saveReporter(\"junit\", externalDestinationReporterPath);\n```\n\n### Trace viewer\n\nReview the [Playwright trace viewer documentation](https://playwright.dev/docs/trace-viewer-intro) in order to know the available reporters and how you can notify playwright which should be run and how.\n\n#### Execute tests in a playwright container with default configuration that should fail and extract the trace viewer zip file\n\n```typescript\nimport { PlaywrightContainer } from \"testcontainers-node-playwright\";\n\nconst startedPlaywrightContainer = await new PlaywrightContainer(\n  PLAYWRIGHT_IMAGE,\n  EXTERNAL_PLAYWRIGHT_PROJECT_DIRECTORY,\n).start();\n\nconst { exitCode } = await startedPlaywrightContainer.exec([\n  \"npx\",\n  \"playwright\",\n  \"test\",\n  \"tests/example-fail.spec.ts\",\n  \"--trace\",\n  \"on\",\n]);\n\nconst TEST_FAILED_NAME_GET_STARTED_LINK_IN_KEBAB_CASE = \"example-fail-get-started-link\";\n\nconst browsers = [\"chromium\", \"firefox\", \"webkit\"];\n\nawait startedPlaywrightContainer.saveTraceViewer(\n  browsers,\n  TEST_FAILED_NAME_GET_STARTED_LINK_IN_KEBAB_CASE,\n  EXTERNAL_PLAYWRIGHT_SAVE_TRACES_DIRECTORY,\n);\n\nawait startedPlaywrightContainer.stop();\n```\n\n### Run playwright tests pointed to your app\n\nWe have seen how to run a playwright container, mount and execute some tests against an application already\ndeployed on the web but, the interesting use case is how we can do the same to execute the same tests pointed to another\ncontainer that is running the web application that we want to test in our same environment.\n\n#### Run playwright tests in a playwright container pointed to your app container\n\n##### Pointed to our hello world app example\n\nTo testing purposes we are using an image that allow us run a container with a simple web server that serve\na simple html with some vanilla javascript behavior.\n\nThis app has the [source code](https://github.com/javierlopezdeancos/example-hello-world-app?tab=readme-ov-file) and the\n[docker image pushed](https://hub.docker.com/repository/docker/javierland/example-hello-world-app/general) to use\nit here as container application to check if the playwright container can pass its tests.\n\nYou can identify how we create and start this container in `playwright-container.test.ts` file:\n\n```typescript\nimport { Network, GenericContainer } from \"testcontainers\";\nimport { PlaywrightContainer } from \"testcontainers-node-playwright\";\n\nconst PLAYWRIGHT_IMAGE = \"mcr.microsoft.com/playwright:v1.43.0-jammy\";\nconst HELLO_WORLD_APP_IMAGE = \"javierland/example-hello-world-app:latest\";\n\nconst EXTERNAL_HELLO_WORLD_APP_PORT_TO_BE_TESTED = \"3000\";\nconst EXTERNAL_HELLO_WORLD_APP_ALIAS_TO_BE_TESTED = \"hello-world-app\";\nconst EXTERNAL_HELLO_WORLD_APP_TESTS_DIRECTORY = path.resolve(__dirname, \"example-hello-world-app-tests\");\n\nconst network: Network = new Network();\nconst startedNetwork = await network.start();\n\n// Start the hello world app container to pass the playwright tests\nconst helloWorldAppStartedContainer = await new GenericContainer(HELLO_WORLD_APP_IMAGE)\n  .withNetwork(startedNetwork)\n  .withExposedPorts(EXTERNAL_HELLO_WORLD_APP_PORT_TO_BE_TESTED)\n  .start();\n\nconst helloWorldAppStartedContainerIpAddress = helloWorldAppStartedContainer.getIpAddress(startedNetwork.getName());\n\n// Start the playwright container to execute the tests pointing to the hello world app container\nconst startedPlaywrightContainer = await new PlaywrightContainer(\n  PLAYWRIGHT_IMAGE,\n  EXTERNAL_HELLO_WORLD_APP_TESTS_DIRECTORY,\n)\n  .withNetwork(startedNetwork)\n  .withEnvironment({\n    APP_CONTAINER_URL_TO_GO_TO: `http://${helloWorldAppStartedContainerIpAddress}:${EXTERNAL_HELLO_WORLD_APP_PORT_TO_BE_TESTED}`,\n  })\n  .start();\n\nconst { output, exitCode } = await startedPlaywrightContainer.exec([\n  \"npx\",\n  \"playwright\",\n  \"test\",\n  \"tests/example-success.spec.ts\",\n  \"--reporter=dot\",\n]);\n\nawait startedPlaywrightContainer.stop();\nawait helloWorldAppStartedContainer.stop();\nawait startedNetwork.stop();\n\n```\n\n\u003e [!NOTE]\n\u003e Take into account that we should start the `helloWorldAppStartedContainer` with a started network that we should add\n\u003e too into the playwright container initialization to be able the containers communication.\n\u003e In addition to the two containers being on the same network, the [easiest way for testcontainers to help in\n\u003e containers communication](https://node.testcontainers.org/features/networking/#network-aliases) is to set up an alias\n\u003e for each container that we want to reference.\n\n\u003e [!NOTE]\n\u003e Take into account that you should reference into `APP_CONTAINER_URL_TO_GO_TO` env var in your playwright test\n\u003e to be executed pointed to your app container.\n\nSo, in your playwright test file:\n\n```typescript\n// ...\n\nconst { APP_CONTAINER_URL_TO_GO_TO = \"http://localhost:3000\" } = process.env;\n\ntest(\"should blablabla\", async ({ page }) =\u003e {\n  await page.goto(APP_CONTAINER_URL_TO_GO_TO);\n\n  // ...\n});\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjavierlopezdeancos%2Ftestcontainers-node-playwright","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjavierlopezdeancos%2Ftestcontainers-node-playwright","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjavierlopezdeancos%2Ftestcontainers-node-playwright/lists"}