{"id":29741759,"url":"https://github.com/riezebosch/consoleum","last_synced_at":"2025-07-26T01:19:57.690Z","repository":{"id":46053012,"uuid":"101873953","full_name":"riezebosch/Consoleum","owner":"riezebosch","description":"Selenium for Console Apps","archived":false,"fork":false,"pushed_at":"2023-02-13T05:06:35.000Z","size":1394,"stargazers_count":7,"open_issues_count":3,"forks_count":4,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-07-22T08:52:17.408Z","etag":null,"topics":["bdd","console-application","csharp","dotnet","selenium","specflow","uitest"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/riezebosch.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-08-30T11:36:22.000Z","updated_at":"2021-11-17T13:55:52.000Z","dependencies_parsed_at":"2022-08-28T12:13:32.326Z","dependency_job_id":null,"html_url":"https://github.com/riezebosch/Consoleum","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/riezebosch/Consoleum","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/riezebosch%2FConsoleum","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/riezebosch%2FConsoleum/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/riezebosch%2FConsoleum/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/riezebosch%2FConsoleum/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/riezebosch","download_url":"https://codeload.github.com/riezebosch/Consoleum/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/riezebosch%2FConsoleum/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267098459,"owners_count":24035758,"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","status":"online","status_checked_at":"2025-07-25T02:00:09.625Z","response_time":70,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["bdd","console-application","csharp","dotnet","selenium","specflow","uitest"],"created_at":"2025-07-26T01:19:52.771Z","updated_at":"2025-07-26T01:19:57.681Z","avatar_url":"https://github.com/riezebosch.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![AppVeyor](https://img.shields.io/appveyor/ci/riezebosch/consoleum/master.svg)](https://ci.appveyor.com/project/riezebosch/consoleum?branch=master)\n[![NuGet Consoleum](https://img.shields.io/nuget/v/Consoleum.svg)](https://www.nuget.org/packages/Consoleum/)\n[![NuGet Consoleum.PageObjects](https://img.shields.io/nuget/v/Consoleum.PageObjects.svg)](https://www.nuget.org/packages/Consoleum.PageObjects/)\n\n## Consoleum\n\nA [Selenium](http://www.seleniumhq.org/)-like solution for automating console applications.\n\n![action](action.gif?raw=true)\n\n## Origin\n\nThis project is a spin-off from a [SpecFlow](http://specflow.org/) exercise. Don't get bogged down with [automation-id's](https://docs.microsoft.com/en-us/dotnet/framework/ui-automation/use-the-automationid-property) or [css selectors](https://www.w3schools.com/cssref/css_selectors.asp) but write UI tests against a good-ol' console application while still using practices like [Page Object Design Pattern](http://www.seleniumhq.org/docs/06_test_design_considerations.jsp#page-object-design-pattern).\n\n## How\n\nUse the `IConsoleDriver` and `ConsoleDriver` to start the process and the provided `ICaptureOutput` and [`IKeyboardSimulator`](https://github.com/michaelnoonan/inputsimulator) to interact with the console.\n\n## Page Objects\n\nYou can use this package without or use plain POCO's, but you might want to use the `Page` base class from the [Consoleum.PageObjects](https://www.nuget.org/packages/Consoleum.PageObjects/) package instead.\n\n```cs\npublic void SomeTestMethod()\n{\n    using (var driver = new ConsoleDriver(\"some-app.exe\"))\n    {\n        driver.Start();\n\n        Page\n            .StartWith\u003cMain\u003e(driver)\n            .SomeActionOnCurrentPage()\n            .SomeNavigationAction()\n            .ShouldBeLoggedInByNow();\n    }\n}\n```\n\n```cs\nclass Main : Page\n{\n    public override bool IsOpen =\u003e ExistsInOutput(\"pattern-matching-output-on-this-page\");\n\n    public Main SomeActionOnCurrentPage()\n    {\n        Driver\n            .Keyboard\n            .KeyPress(...)\n            .Sleep(200);\n        \n        return this;\n    }\n\n    public Another SomeNavigationAction()\n    {\n        Driver\n            .Keyboard\n            .KeyPress(...)\n            .Sleep(200);\n        \n        return NavigateTo\u003cAnother\u003e();\n    }\n}\n```\nLook at the [tests](Consoleum.PageObjects.Tests) for more inspiration on reusing the driver over multiple tests and assertions using [Shouldly](https://www.nuget.org/packages/Shouldly/).\n\n## Why not xplat?\n\nThis package relies heavily on Windows Desktop functions for starting the process, capturing the output on the clipboard using keystrokes and native Win32 invocations to grab that data from the clipboard. \nYou do the math why it can't be xplat.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Friezebosch%2Fconsoleum","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Friezebosch%2Fconsoleum","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Friezebosch%2Fconsoleum/lists"}