{"id":13804703,"url":"https://github.com/milankinen/cuic","last_synced_at":"2025-04-09T12:09:27.662Z","repository":{"id":45274433,"uuid":"150147383","full_name":"milankinen/cuic","owner":"milankinen","description":"Clojure UI testing with Chrome","archived":false,"fork":false,"pushed_at":"2025-02-11T03:04:48.000Z","size":670,"stargazers_count":37,"open_issues_count":4,"forks_count":4,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-02T11:04:56.712Z","etag":null,"topics":["automation","chrome","chrome-headless","cljdoc","clojure","repl","ui-testing"],"latest_commit_sha":null,"homepage":"","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/milankinen.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,"publiccode":null,"codemeta":null}},"created_at":"2018-09-24T18:13:46.000Z","updated_at":"2024-12-18T20:09:15.000Z","dependencies_parsed_at":"2024-04-09T18:55:29.569Z","dependency_job_id":"0656d9f2-8f6d-4b77-87e3-6ef843b62b32","html_url":"https://github.com/milankinen/cuic","commit_stats":{"total_commits":237,"total_committers":1,"mean_commits":237.0,"dds":0.0,"last_synced_commit":"7f2bd8579efa95c751c33c23db0c5a11fd4e1f75"},"previous_names":[],"tags_count":25,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/milankinen%2Fcuic","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/milankinen%2Fcuic/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/milankinen%2Fcuic/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/milankinen%2Fcuic/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/milankinen","download_url":"https://codeload.github.com/milankinen/cuic/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248036067,"owners_count":21037092,"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":["automation","chrome","chrome-headless","cljdoc","clojure","repl","ui-testing"],"created_at":"2024-08-04T01:00:52.909Z","updated_at":"2025-04-09T12:09:27.634Z","avatar_url":"https://github.com/milankinen.png","language":"Clojure","funding_links":[],"categories":["Chrome DevTools Protocol"],"sub_categories":["Libraries for driving the protocol (or a layer above)"],"readme":"# \u003cimg src=\"kuikka.svg\" align=\"left\" width=\"60\" height=\"60\"\u003e CUIC\n\nClojure UI testing with Chrome. Special thanks to Timo L. for the awesome logo!\n\n[![Build status](https://img.shields.io/github/workflow/status/milankinen/cuic/Run%20tests/master?style=flat-square)](https://github.com/milankinen/cuic/actions?query=workflow%3A%22Run+tests%22)\n[![Clojars Project](https://img.shields.io/clojars/v/cuic.svg?style=flat-square)](https://clojars.org/cuic)\n[![cljdoc](https://img.shields.io/badge/cljdoc-latest-blue?style=flat-square)](https://cljdoc.org/d/cuic/cuic/CURRENT)\n\n## Motivation\n\nI needed a library for writing robust and maintainable UI tests for my work \nand hobby Clojure(Script) projects. The library had to run on top of the \nJVM to simplify test setups and enable code sharing, but without the \nannoying WebDriver version hassle. `cuic` is a response to fill that gap.\n\nThe design of the current version of `cuic` is the result of countless \n(re)written tests, hours after hours of CI test runs and endless debugging\nsessions, driven by the following core principles:\n\n  * Prefer Clojure core data structures and language features \n    to custom macros and DSLs\n  * Minimal and unambiguous but easily extendable API \n  * Seamless integration with `clojure.test` and the tooling around it\n  * First class REPL usage\n\n## Show me the code!\n\nHere's a small snippet showing how to test the classic\n[TodoMVC app](http://todomvc.com/examples/react) with `cuic`\n\n```clojure \n(ns example-todomvc-tests\n  (:require [clojure.test :refer :all]\n            [cuic.core :as c]\n            [cuic.test :refer [deftest* is* browser-test-fixture]]))\n\n(use-fixtures\n  :once\n  (browser-test-fixture))\n\n(defn todos []\n  (-\u003e\u003e (c/query \".todo-list li\")\n       (map c/text-content)))\n\n(defn add-todo [text]\n  (doto (c/find \".new-todo\")\n    (c/fill text))\n  (c/press 'Enter))\n\n(deftest* creating-new-todos\n  (c/goto \"http://todomvc.com/examples/react\")\n  (is* (= [] (todos)))\n  (add-todo \"Hello world!\")\n  (is* (= [\"Hello world!\"] (todos)))\n  (add-todo \"Tsers!\")\n  (is* (= [\"Hello world!\" \"Tsers!\"] (todos))))\n```\n\n## Documentation\n\nEach `cuic` function has a Clojure doc-string describing its behaviour and usage. \nGenerated API docs and guides are also available in **[cljdoc.org](https://cljdoc.org/d/cuic/cuic)**.\n\n* [Usage](https://cljdoc.org/d/cuic/cuic/CURRENT/doc/usage)\n    * [Browser management](https://cljdoc.org/d/cuic/cuic/CURRENT/doc/usage/browser-management)\n    * [Element queries](https://cljdoc.org/d/cuic/cuic/CURRENT/doc/usage/element-queries)\n    * [Interactions](https://cljdoc.org/d/cuic/cuic/CURRENT/doc/usage/interactions)\n    * [Asynchrony](https://cljdoc.org/d/cuic/cuic/CURRENT/doc/usage/asynchrony)\n    * [Tests and fixtures](https://cljdoc.org/d/cuic/cuic/CURRENT/doc/usage/tests-and-fixtures)\n    * [REPL](https://cljdoc.org/d/cuic/cuic/CURRENT/doc/usage/repl)\n* [Cookbook](https://cljdoc.org/d/cuic/cuic/CURRENT/doc/cookbook)\n    * [Multi-browser testing](https://cljdoc.org/d/cuic/cuic/CURRENT/doc/cookbook/multi-browser-testing)\n\n## Similar projects\n\n* [Etaoin](https://github.com/igrishaev/etaoin) - Pure Clojure implementation of Webdriver protocol\n* [clj-chrome-devtools](https://github.com/tatut/clj-chrome-devtools) - Clojure wrapper for Chrome Debug Protocol\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmilankinen%2Fcuic","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmilankinen%2Fcuic","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmilankinen%2Fcuic/lists"}