{"id":16726089,"url":"https://github.com/tatut/pows","last_synced_at":"2025-07-11T13:30:36.979Z","repository":{"id":216323902,"uuid":"741040751","full_name":"tatut/pows","owner":"tatut","description":"Playwright over WebSocket","archived":false,"fork":false,"pushed_at":"2024-01-12T09:22:06.000Z","size":11,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-10-13T22:52:03.356Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Clojure","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/tatut.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}},"created_at":"2024-01-09T15:22:03.000Z","updated_at":"2024-07-04T13:48:55.000Z","dependencies_parsed_at":"2024-01-12T13:26:01.415Z","dependency_job_id":"cbf16d70-f79e-4850-b270-2e512c9e62e0","html_url":"https://github.com/tatut/pows","commit_stats":null,"previous_names":["tatut/pows"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tatut%2Fpows","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tatut%2Fpows/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tatut%2Fpows/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tatut%2Fpows/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tatut","download_url":"https://codeload.github.com/tatut/pows/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225724169,"owners_count":17514144,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2024-10-12T22:52:04.254Z","updated_at":"2025-07-11T13:30:36.973Z","avatar_url":"https://github.com/tatut.png","language":"Clojure","funding_links":[],"categories":[],"sub_categories":[],"readme":"# pows: Playwright over WebSocket\n\npows is a host that exposes Playwright functionality through a\nsimple JSON-over-WebSocket protocol.\n\nEvery WS connection gets a fresh playwright context and can use\nit to do commands and assertions.\n\nPlaywright has APIs for many languages, but not all. This host can be used\nto add bindings for the missing languages. Most every language will have\nJSON and WS libraries that can be used to integrate.\n\n[![asciicast](https://asciinema.org/a/630656.svg)](https://asciinema.org/a/630656)\n\n## Usage\n\nDownload a relese and start it with `java -jar \u003crelease jar file\u003e`.\nThen you are ready to connect to it. You can optionally pass in a port number to use instead of 3344.\n\nYou can also run this via Clojure cli tools: `clojure -M:run`\n\n## Bindings\n\nLanguage bindings that use pows:\n- [pharo-Pows](https://github.com/tatut/pharo-Pows) for Pharo Smalltalk\n\n\n## Commands\n\nAll commands are JSON objects. The first command may have an `\"options\"` key\nthat has an object that configures the context.\n\nCommands that operate or make an assertion need a `\"locator\"` key which\nis a string or an array of strings. For example `\"div.counter\"` and\n`[\"div.counter\" \"nth=0\"]` are valid locators. See playwright documentation\non locator strings.\n\nCommands that do an assertion may have the key/value `\"not\": true` to negate\nthe assertion.\n\nResponses to commands will also always be a JSON object with a `\"success\"` key\ncontaining a boolean value. Assertion responses will also contain `\"expected\"` and\n`\"actual\"` keys. Execution errors will contain `\"error\"` with a string message.\n\nSee [Locator](https://playwright.dev/java/docs/api/class-locator) and [LocatorAssertions](https://playwright.dev/java/docs/api/class-locatorassertions)\nfor available commands and methods (not everything is implemented).\n\nFor 0-arity calls you can pass any value, it is ignored (for now), eg. `{\"locator\":\"button\",\"click\":1}`.\nFor 1-arity calls the value is used as the sole argument, eg. `{\"locator\":\"input\",\"fill\":\"type something\"}`.\nFor higher arities the value is an array of arguments eg, `{\"locator\":\".myfoo\",\"hasAttribute\":[\"data-baz\",\"420\"]}`.\n\nNavigation is done with the `{\"go\": \"http://...some url..\"}` command. You can also\ninclude `\"options\"` object that may have a `\"timeout\"` (milliseconds, defaults to 10000)\nand `\"headless\"` (boolean, defaults to true).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftatut%2Fpows","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftatut%2Fpows","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftatut%2Fpows/lists"}