{"id":18776568,"url":"https://github.com/onsi/biloba","last_synced_at":"2025-04-13T09:31:58.625Z","repository":{"id":130012304,"uuid":"609316757","full_name":"onsi/biloba","owner":"onsi","description":"Stable, performant, automated browser testing for Ginkgo","archived":false,"fork":false,"pushed_at":"2023-09-18T16:30:30.000Z","size":705,"stargazers_count":19,"open_issues_count":1,"forks_count":4,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-27T01:11:45.350Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://onsi.github.io/biloba/","language":"Go","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/onsi.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":["onsi"]}},"created_at":"2023-03-03T21:06:49.000Z","updated_at":"2024-09-16T05:56:40.000Z","dependencies_parsed_at":null,"dependency_job_id":"39420d74-42dc-4183-94c7-159b6cc5b1cc","html_url":"https://github.com/onsi/biloba","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/onsi%2Fbiloba","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/onsi%2Fbiloba/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/onsi%2Fbiloba/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/onsi%2Fbiloba/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/onsi","download_url":"https://codeload.github.com/onsi/biloba/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248690844,"owners_count":21146216,"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-11-07T19:46:40.325Z","updated_at":"2025-04-13T09:31:57.795Z","avatar_url":"https://github.com/onsi.png","language":"Go","funding_links":["https://github.com/sponsors/onsi"],"categories":[],"sub_categories":[],"readme":"![Ginkgo](https://onsi.github.io/biloba/images/biloba.png)\n\n[![test](https://github.com/onsi/biloba/workflows/test/badge.svg?branch=master)](https://github.com/onsi/biloba/actions?query=workflow%3Atest+branch%3Amaster) | [Biloba Docs](https://onsi.github.io/biloba/)\n\n---\n\n# Biloba\n\n\u003e \"Automated browser testing is slow and flaky\" - _every developer, ever_\n\nBiloba builds on top of [chromedp](https://github.com/chromedp/chromedp) to bring stable, performant, automated browser testing to Ginkgo. It embraces three principles:\n  - Performance via parallelization\n  - Stability via pragmatism\n  - Conciseness via Ginkgo and Gomega\n\nTake a look at the [documentation](https://onsi.github.io/biloba) to learn more and get started!\n\nHere's a quick taste of what Biloba specs look like:\n\n```go\nfunc login(tab *Biloba, user string, password string) {\n\tGinkgoHelper()\n\ttab.Navigate(\"/login\")\n\tEventually(\"#user\").Should(tab.SetValue(\"sally\"))\n\ttab.SetValue(\"#password\", \"yllas\")\n\ttab.Click(\"#log-in\")\n\tEventually(\".chat-page\").Should(tab.Exist())\n}\n\nDescribe(\"a simple chat app\", func() {\n\tvar tab *Biloba\n\tBeforeEach(func() {\n\t\tlogin(b, \"sally\", \"yllas\")\n\t\ttab = b.NewTab()\n\t\tlogin(tab, \"jane\", \"enaj\")\n\t})\n\n\tIt(\"shows all logged in users as present\", func() {\n\t\tuserXPath := b.XPath(\"div\").WithID(\"user-list\").Descendant()\n\t\t// b should show both users\n\t\tEventually(userXPath.WithText(\"Sally\")).Should(b.HaveClass(\"online\"))\n\t\tEventually(userXPath.WithText(\"Jane\")).Should(b.HaveClass(\"online\"))\n\t\t// tab should show both users\n\t\tEventually(userXPath.WithText(\"Sally\")).Should(tab.HaveClass(\"online\"))\n\t\tEventually(userXPath.WithText(\"Jane\")).Should(tab.HaveClass(\"online\"))\n\t})\n\n\tIt(\"shows Jane when Sally is typing\", func() {\n\t\tlastEntryXPath := tab.XPath(\"#conversation\").Descendant().WithClass(\"entry\").Last()\n\t\tb.SetValue(\"#input\", \"Hey Jane, how are you?\")\n\t\tEventually(lastEntryXPath).Should(SatisfyAll(\n\t\t\ttab.HaveInnerText(\"Jane is typing...\"),\n\t\t\ttab.HaveClass(\"typing\"),\n\t\t))\n\n\t\tb.SetValue(\"#input\", \"\")\n\t\tEventually(lastEntryXPath).ShouldNot(SatisfyAny(\n\t\t\ttab.HaveInnerText(\"Jane is typing...\"),\n\t\t\ttab.HaveClass(\"typing\"),\n\t\t))\n\t})\n\n\tIt(\"shows Jane new messages from Sally, and sally new messages from Jane\", func() {\n\t\tlastEntryXPath := tab.XPath(\"#conversation\").Descendant().WithClass(\"entry\").Last()\n\t\tb.SetValue(\"#input\", \"Hey Jane, how are you?\")\n\t\tb.Click(\"#send\")\n\t\tEventually(lastEntryXPath).Should(tab.HaveInnerText(\"Hey Jane, how are you?\"))\n\n\t\ttab.SetValue(\"#input\", \"I'm splendid, Sally!\")\n\t\ttab.Click(\"#send\")\n\t\tEventually(lastEntryXPath).Should(b.HaveInnerText(\"I'm splendid, Sally!\"))\n\t})\n\n\tIt(\"tracks when users aren't online\", func() {\n\t\tuserXPath := b.XPath(\"div\").WithID(\"user-list\").Descendant()\n\t\tEventually(userXPath.WithText(\"Jane\")).Should(b.HaveClass(\"online\"))\n\n\t\ttab.Close()\n\t\tEventually(userXPath.WithText(\"Jane\")).Should(b.HaveClass(\"offline\"))\n\t})\n})\n```\n\nRun these in series with `ginkgo`.  And in parallel with `ginkgo -p` for fast, stable, browser tests.\n\nBiloba is quite feature complete and in active development.  However, a 1.0 release milestone has not been reached yet, so the public API contract may shift as the project evolves.\n\n---\n\nGinkgo Tree Graphics Designed By 可行 From \u003ca href=\"https://lovepik.com/image-401791345/ginkgo-branches-in-autumn.html\"\u003eLovePik.com\u003c/a\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fonsi%2Fbiloba","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fonsi%2Fbiloba","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fonsi%2Fbiloba/lists"}