{"id":21810180,"url":"https://github.com/williamsmithedward/chromefortestingautomateddownload","last_synced_at":"2026-05-17T18:32:51.112Z","repository":{"id":191249213,"uuid":"684251959","full_name":"WilliamSmithEdward/ChromeForTestingAutomatedDownload","owner":"WilliamSmithEdward","description":"Support library that interfaces with the JSON endpoints included in the Chrome for Testing project.","archived":false,"fork":false,"pushed_at":"2023-10-03T17:44:08.000Z","size":72,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-20T19:55:42.677Z","etag":null,"topics":["automation","chrome","chrome-driver","chrome-headless-shell","chromefortesting","download","googlechromelabs"],"latest_commit_sha":null,"homepage":"https://www.nuget.org/packages/ChromeForTestingAutomatedDownload","language":"C#","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/WilliamSmithEdward.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}},"created_at":"2023-08-28T18:59:57.000Z","updated_at":"2023-09-22T05:04:53.000Z","dependencies_parsed_at":"2023-09-21T20:27:53.663Z","dependency_job_id":"84695db2-7e3e-4e08-94f5-ff276e89cd35","html_url":"https://github.com/WilliamSmithEdward/ChromeForTestingAutomatedDownload","commit_stats":{"total_commits":53,"total_committers":1,"mean_commits":53.0,"dds":0.0,"last_synced_commit":"c5ac9f9e92d70449f23147272b3a4f33e4524d61"},"previous_names":["williamsmithedward/chromefortestingautomateddownload"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/WilliamSmithEdward/ChromeForTestingAutomatedDownload","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WilliamSmithEdward%2FChromeForTestingAutomatedDownload","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WilliamSmithEdward%2FChromeForTestingAutomatedDownload/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WilliamSmithEdward%2FChromeForTestingAutomatedDownload/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WilliamSmithEdward%2FChromeForTestingAutomatedDownload/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/WilliamSmithEdward","download_url":"https://codeload.github.com/WilliamSmithEdward/ChromeForTestingAutomatedDownload/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WilliamSmithEdward%2FChromeForTestingAutomatedDownload/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33149580,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-17T09:28:26.183Z","status":"ssl_error","status_checked_at":"2026-05-17T09:27:52.702Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":["automation","chrome","chrome-driver","chrome-headless-shell","chromefortesting","download","googlechromelabs"],"created_at":"2024-11-27T13:33:16.677Z","updated_at":"2026-05-17T18:32:51.090Z","avatar_url":"https://github.com/WilliamSmithEdward.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ChromeForTestingAutomatedDownload\n\nSupport library that interfaces with the JSON endpoints included in https://github.com/GoogleChromeLabs/chrome-for-testing\n\n### Attributions\n\n* Foundation of local version checking logic credited to Niels Swimberghe https://swimburger.net/blog/dotnet\n\n### Chrome Version Models\n\n* KnownGoodVersions.ChromeVersionModel\n* KnownGoodVersionsWithDownloads.ChromeVersionModel\n* LastKnownGoodVersion.ChromeVersionModel\n* LastKnownGoodVersionWithDownloads.ChromeVersionModel\n* LatestPatchVersionsPerBuild.ChromeVersionModel\n* LatestPatchVersionsPerBuildWithDownloads.ChromeVersionModel\n* LatestVersionsPerMilestone.ChromeVersionModel\n* LatestVersionsPerMilestoneWithDownloads.ChromeVersionModel\n\n### Chrome Version Model Factory\n\n```csharp\npublic static class ChromeVersionModelFactory\n{\n    public static async Task\u003cT\u003e CreateChromeVersionModelAsync\u003cT\u003e() where T : IChromeVersionModel, new()\n    {\n        var response = await new T().QueryEndpointAsync();\n\n        var deserializedObject = JsonSerializer.Deserialize\u003cT\u003e(response);\n        if (deserializedObject != null) return deserializedObject;\n\n        throw new JsonException(\"Failed to deserialize endpoint.\");\n    }\n}\n```\n\n### Example Usage\n\n#### Download the Latest Version of ChromeDriver that Matches the Major Release Version of Chrome Installed on the Machine\nNote: For windows, the logic will default to downloading the binary that matches the architecture of Chrome installed on the machine, with x64 taking priority.\n```csharp\nusing ChromeForTestingAutomatedDownload;\n\n//Will download chrome driver with platform matching the OS of the machine the .exe is running on\nawait AutomatedDownload.DownloadChromeDriverAsync();\n\n//Download for a specific platform\nawait AutomatedDownload.DownloadChromeDriverAsync(Platform.Linux64);\n```\n\n#### Get the URL of the Most Recent Asset\n```csharp\nusing ChromeForTestingAutomatedDownload;\n\nvar result = await ChromeVersionModelFactory\n    .CreateChromeVersionModelAsync\u003cLatestVersionsPerMilestoneWithDownload.ChromeVersionModel\u003e();\n\nvar url = await result.GetMostRecentAssetURLAsync(Binary.ChromeDriver, Platform.MacX64);\n\nConsole.WriteLine(url);\n```\n\n#### Get the URL of the Most Recent Asset by Major Release Number\n```csharp\nusing ChromeForTestingAutomatedDownload;\n\nvar result = await ChromeVersionModelFactory\n    .CreateChromeVersionModelAsync\u003cLatestVersionsPerMilestoneWithDownload.ChromeVersionModel\u003e();\n\nvar url = await result\n    .GetMostRecentAssetURLByMajorReleaseNumberAsync(Binary.ChromeDriver, Platform.Win64, 118);\n\nConsole.WriteLine(url);\n```\n\n#### Get a Specific Download URL by Filtering with LINQ\n```csharp\nusing ChromeForTestingAutomatedDownload;\n\nvar result = await ChromeVersionModelFactory\n    .CreateChromeVersionModelAsync\u003cLastKnownGoodVersionsWithDownloads.ChromeVersionModel\u003e();\n\nvar downloadURL = result\n    .Channels\n    .Stable\n    .Downloads\n    .ChromeDriver\n    .Where(x =\u003e x.Platform.Equals(\"win64\"))\n    .First()\n    .Url;\n\nConsole.WriteLine(downloadURL);\n```\n\n#### Get a List of Last Known Good Versions by Binary Type / Platform\n```csharp\nusing ChromeForTestingAutomatedDownload;\n\nvar result = await ChromeVersionModelFactory\n    .CreateChromeVersionModelAsync\u003cLatestPatchVersionsPerBuildWithDownloads.ChromeVersionModel\u003e();\n\nvar builds = result.Builds.Values;\n\nvar downloads = builds\n    .Select(x =\u003e x.Downloads);\n\nvar chromeDriverDownloads = download\n    .SelectMany(x =\u003e x.ChromeDriver);\n\nvar chromeDriverURLs = chromeDriverDownloads\n    .Where(x =\u003e x.Platform.Equals(\"win64\") \u0026\u0026 string.IsNullOrEmpty(x.Url) == false)\n    .Select(x =\u003e x.Url);\n\nforeach (var url in chromeDriverURLs)\n{\n    Console.WriteLine(url);\n}\n```\n\n#### Get a List of All Milestones Download URLs\n```csharp\nusing ChromeForTestingAutomatedDownload;\n\nvar result = await ChromeVersionModelFactory\n    .CreateChromeVersionModelAsync\u003cLatestVersionsPerMilestoneWithDownload.ChromeVersionModel\u003e();\n\nvar chromeDriverDownlods = result\n    .Milestones\n    .Values\n    .Select(x =\u003e x.Downloads)\n    .SelectMany(x =\u003e x.ChromeDriver)\n    .ToList();\n\nforeach (var item in chromeDriverDownlods)\n{\n    Console.WriteLine(item.Platform + \" \" + item.Url);\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwilliamsmithedward%2Fchromefortestingautomateddownload","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwilliamsmithedward%2Fchromefortestingautomateddownload","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwilliamsmithedward%2Fchromefortestingautomateddownload/lists"}