{"id":19380349,"url":"https://github.com/atata-framework/atata-configuration-json","last_synced_at":"2025-06-14T20:38:27.603Z","repository":{"id":23208783,"uuid":"98430202","full_name":"atata-framework/atata-configuration-json","owner":"atata-framework","description":"JSON configuration of Atata","archived":false,"fork":false,"pushed_at":"2025-04-08T19:52:50.000Z","size":1498,"stargazers_count":16,"open_issues_count":0,"forks_count":2,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-06-11T00:39:36.483Z","etag":null,"topics":["atata","configuration","csharp","dotnet","json","json-configuration"],"latest_commit_sha":null,"homepage":null,"language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/atata-framework.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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,"zenodo":null},"funding":{"open_collective":"atata"}},"created_at":"2017-07-26T14:10:22.000Z","updated_at":"2025-04-26T11:02:08.000Z","dependencies_parsed_at":"2023-12-15T22:04:15.483Z","dependency_job_id":"7f78ed60-c8be-40da-9d84-82db198ffd7a","html_url":"https://github.com/atata-framework/atata-configuration-json","commit_stats":{"total_commits":389,"total_committers":3,"mean_commits":"129.66666666666666","dds":"0.23136246786632386","last_synced_commit":"04d29cf30d70a9adab9969fb34f56a7ef76d64ed"},"previous_names":[],"tags_count":21,"template":false,"template_full_name":null,"purl":"pkg:github/atata-framework/atata-configuration-json","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atata-framework%2Fatata-configuration-json","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atata-framework%2Fatata-configuration-json/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atata-framework%2Fatata-configuration-json/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atata-framework%2Fatata-configuration-json/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/atata-framework","download_url":"https://codeload.github.com/atata-framework/atata-configuration-json/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atata-framework%2Fatata-configuration-json/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259880520,"owners_count":22925952,"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":["atata","configuration","csharp","dotnet","json","json-configuration"],"created_at":"2024-11-10T09:13:41.860Z","updated_at":"2025-06-14T20:38:27.568Z","avatar_url":"https://github.com/atata-framework.png","language":"C#","funding_links":["https://opencollective.com/atata"],"categories":[],"sub_categories":[],"readme":"# Atata.Configuration.Json\n\n[![NuGet](http://img.shields.io/nuget/v/Atata.Configuration.Json.svg?style=flat)](https://www.nuget.org/packages/Atata.Configuration.Json/)\n[![GitHub release](https://img.shields.io/github/release/atata-framework/atata-configuration-json.svg)](https://github.com/atata-framework/atata-configuration-json/releases)\n[![Build status](https://dev.azure.com/atata-framework/atata-configuration-json/_apis/build/status/atata-configuration-json-ci?branchName=main)](https://dev.azure.com/atata-framework/atata-configuration-json/_build/latest?definitionId=33\u0026branchName=main)\n[![Slack](https://img.shields.io/badge/join-Slack-green.svg?colorB=4EB898)](https://join.slack.com/t/atata-framework/shared_invite/zt-5j3lyln7-WD1ZtMDzXBhPm0yXLDBzbA)\n[![Atata docs](https://img.shields.io/badge/docs-Atata_Framework-orange.svg)](https://atata.io)\n[![Twitter](https://img.shields.io/badge/follow-@AtataFramework-blue.svg)](https://twitter.com/AtataFramework)\n\nC#/.NET package for [Atata](https://github.com/atata-framework/atata) configuration through JSON files.\n\n*The package targets .NET Standard 2.0, which supports .NET 5+, .NET Framework 4.6.1+ and .NET Core/Standard 2.0+.*\n\n**[What's new in v3.0.0](https://github.com/atata-framework/atata-configuration-json/releases/tag/v3.0.0)**\n\n## Table of Contents\n\n- [Features](#features)\n- [Installation](#installation)\n- [Usage](#usage)\n  - [JSON](#json)\n  - [Apply Configuration](#apply-configuration)\n  - [Get Config Properties](#get-config-properties)\n  - [Custom Settings](#custom-settings)\n  - [Reference Environment Variables](#reference-environment-variables)\n- [JSON Schema](#json-schema)\n  - [Type Name Values](#type-name-values)\n- [Feedback](#feedback)\n- [License](#license)\n\n## Features\n\n* Full configuration of Atata context via JSON file\n* Custom settings\n* Multi-driver configuration\n* Merged configuration via multiple files\n* Multiple environments support\n\n## Installation\n\nInstall [`Atata.Configuration.Json`](https://www.nuget.org/packages/Atata.Configuration.Json/) NuGet package.\n\n- Package Manager:\n\n  ```\n  Install-Package Atata.Configuration.Json\n  ```\n\n- .NET CLI:\n\n  ```\n  dotnet add package Atata.Configuration.Json\n  ```\n\n## Usage\n\n* Add `Atata.json` file (with property \"Copy to Output Directory\" = \"Copy if newer\") to Atata test project.\n* Use one of `ApplyJsonConfig` configurational extension methods to apply JSON config.\n\n### JSON\n\n#### Use Chrome with NUnit settings\n\n```js\n{\n  \"driver\": {\n    \"type\": \"chrome\",\n    \"options\": {\n      \"arguments\": [ \"start-maximized\" ]\n    }\n  },\n  \"baseUrl\": \"https://demo.atata.io/\",\n  \"culture\": \"en-US\",\n  \"useAllNUnitFeatures\": true\n}\n```\n\n#### Use Firefox\n\n```js\n{\n  \"driver\": {\n    \"type\": \"firefox\",\n    \"options\": {\n      \"arguments\": [ \"--start-maximized\" ]\n      }\n    }\n  }\n}\n```\n\n#### Multi-Driver\n\n```js\n{\n  \"drivers\": [\n    {\n      \"type\": \"chrome\",\n      \"options\": {\n        \"arguments\": [ \"start-maximized\" ]\n      }\n    },\n    {\n      \"type\": \"firefox\",\n      \"options\": {\n        \"arguments\": [ \"--start-maximized\" ]\n      }\n    }\n  ]\n}\n```\n\n### Apply Configuration\n\n#### Default\n\n```cs\nAtataContext.Configure()\n    .ApplyJsonConfig() // Applies default \"Atata.json\" config.\n    .Build();\n```\n\n#### Default Globally\n\n```cs\nAtataContext.GlobalConfiguration\n    .ApplyJsonConfig();\n```\n\n#### Named\n\n```cs\nAtataContext.Configure()\n    .ApplyJsonConfig(\"Config.json\") // Applies \"Config.json\" config.\n    .Build();\n```\n\n#### Named With Environment\n\n```cs\nAtataContext.Configure()\n    .ApplyJsonConfig(\"Config\", environmentAlias: \"QA\") // Applies \"Config.QA.json\" config.\n    .Build();\n```\n\n### Get Config Properties\n\n#### Current\n\nUse `JsonConfig.Current` to get current configuration properties.\n\n```cs\nstring baseUrl = JsonConfig.Current.BaseUrl;\n```\n\n#### Global\n\nUse `JsonConfig.Global` to get global configuration properties.\n\n```cs\nstring baseUrl = JsonConfig.Global.BaseUrl;\n```\n\n### Custom Settings\n\n#### Define Config Settings\n\n```js\n{\n  // Driver, url and other standard settings...\n\n  \"intProperty\": 5,\n  \"stringProperty\": \"str\",\n  \"boolProperty\": true,\n  \"stringListValues\": [ \"str1\", \"str2\", \"str3\" ],\n  \"section\": {\n    \"stringProperty\": \"section_str\",\n    \"boolProperty\": true\n  },\n  \"items\": [\n    {\n      \"name\": \"item1\",\n      \"value\": 5\n    },\n    {\n      \"name\": \"item2\",\n      \"value\": 7\n    }\n  ]\n}\n```\n\n#### Define Config Class\n\nConfig class should inherit `JsonConfig\u003cTConfig\u003e` from `Atata.Configuration.Json` namespace.\n\n```cs\nusing System.Collections.Generic;\nusing Atata.Configuration.Json;\n\nnamespace SampleApp\n{\n    public class AppConfig : JsonConfig\u003cAppConfig\u003e\n    {\n        public int IntProperty { get; set; }\n\n        public string StringProperty { get; set; }\n\n        public bool BoolProperty { get; set; }\n\n        public List\u003cstring\u003e StringListValues { get; set; }\n\n        public CustomSection Section { get; set; }\n\n        public List\u003cCustomItemSection\u003e Items { get; set; }\n\n        public class CustomSection\n        {\n            public string StringProperty { get; set; }\n\n            public bool BoolProperty { get; set; }\n        }\n\n        public class CustomItemSection\n        {\n            public string Name { get; set; }\n\n            public int Value { get; set; }\n        }\n    }\n}\n\n```\n\n#### Apply Config\n\n```cs\nAtataContext.Configure()\n    .ApplyJsonConfig\u003cAppConfig\u003e()\n    .Build();\n```\n\n#### Use Config\n\n```cs\nstring rootStringValue = AppConfig.Current.StringProperty;\n\nstring sectionBoolValue = AppConfig.Current.Section.BoolProperty;\n```\n\n### Reference Environment Variables\n\nIt is possible to use environment variables as configuration values of standard or custom properties\nwith help of `{env:VarName}` template insertions.\n\n```js\n{\n  \"baseUrl\": \"{env:BaseUrl}\",\n  \"accountEmail\": \"{env:AccountEmail}\",\n  \"accountPassword\": \"{env:AccountPassword}\"\n}\n```\n\n## JSON Schema\n\n```js\n{\n  \"drivers\": [ // Use \"drivers\" for multiple drivers support.\n    {\n      // See driver settings below.\n    },\n    {\n    }\n  ],\n  \"driver\": { // Use \"driver\" for single driver support.\n    \"type\": \"chrome\", // Supports: \"remote\", \"chrome\", \"firefox\", \"internetexplorer\", \"safari\", \"edge\" and custom mappers registered via DriverJsonMapperAliases.Register method.\n                      // Custom RemoteWebDriver type can also be passed as a full type name, e.g.: \"Namespace.Class, MyAssembly\".\n    \"alias\": \"custom_alias\", // Use aliases when you have several drivers of the same type.\n    \"createRetries\": 2, // Sets the count of possible driver creation retries in case exceptions occur during creation.\n    \"initialHealthCheck\": false, // Sets a value indicating whether to execute an initial health check. Defaults to false.\n    \"remoteAddress\": \"http://127.0.0.1:8888/wd/hub\", // Remote driver specific.\n    \"options\": { // Configures driver options.\n      \"type\": \"chrome\", // Remote driver specific.\n                       // Supports: \"chrome\", \"firefox\", \"internetexplorer\", \"safari\", \"edge\".\n      \"loggingPreferences\": { // Dictionary of logType and logLevel.\n                              // Invokes SetLoggingPreference method of DriverOptions for each item.\n        \"browser\": \"Info\",\n        \"driver\": \"Warning\"\n      },\n      \"additionalOptions\": { // Dictionary of additional driver options.\n        \"globalcap1\": true,\n        \"globalcap2\": 5,\n        \"globalcap3\": \"str\"\n      },\n      \"additionalBrowserOptions\": { // Chrome, Firefox, Edge and InternetExplorer specific.\n                                    // Dictionary of additional browser options.\n        \"cap1\": true,\n        \"cap2\": 5,\n        \"cap3\": \"str\"\n      },\n      \"proxy\": { // Configures instance of OpenQA.Selenium.Proxy type.\n        \"kind\": \"Manual\" // Supports values of OpenQA.Selenium.ProxyKind enum.\n        \"httpProxy\": \"string\",\n        \"ftpProxy\": \"string\",\n        \"sslProxy\": \"string\",\n        \"socksProxy\": \"string\",\n        \"socksUserName\": \"string\",\n        \"socksPassword\": \"string\",\n        \"proxyAutoConfigUrl\": \"string\",\n        \"bypassAddresses\": [ \"string\", \"string\" ]\n      },\n      \"arguments\": [ \"string\", \"string\" ], // Chrome, Firefox and Edge specific.\n      \"excludedArguments\": [ \"string\", \"string\" ], // Chrome and Edge specific.\n      \"extensions\": [ \"string\", \"string\" ], // Chrome and Edge specific.\n      \"encodedExtensions\": [ \"string\", \"string\" ], // Chrome and Edge specific.\n      \"windowTypes\": [ \"string\", \"string\" ], // Chrome and Edge specific.\n      \"performanceLoggingPreferences\": { // Chrome and Edge specific.\n                                         // Configures instance of OpenQA.Selenium.Chromium.ChromiumPerformanceLoggingPreferences type.\n        \"isCollectingNetworkEvents\": false,\n        \"isCollectingPageEvents\": false,\n        \"bufferUsageReportingInterval\": \"00:01:10\",\n        \"tracingCategories\": [ \"string\", \"string\" ]\n      },\n      \"userProfilePreferences\": { // Chrome and Edge specific.\n                                  // Dictionary of preferenceName and preferenceValue.\n                                  // Invokes AddUserProfilePreference method of driver specific options (e.g., ChromeOptions) for each item.\n        \"pref1\": false,\n        \"pref2\": \"str\"\n      },\n      \"localStatePreferences\": { // Chrome and Edge specific.\n                                 // Dictionary of preferenceName and preferenceValue.\n                                 // Invokes AddLocalStatePreference method of driver specific options (e.g., ChromeOptions) for each item.\n        \"pref1\": 2.7,\n        \"pref2\": true\n      },\n      \"profile\": { // Firefox specific.\n                   // Configures instance of OpenQA.Selenium.Firefox.FirefoxProfile type.\n        \"profileDirectory\": \"string\",\n        \"deleteSourceOnClean\": true,\n        \"preferences\": { // Dictionary of name and value.\n                         // Invokes SetPreference method of FirefoxProfile for each item.\n          \"pref1\": true,\n          \"pref2\": 5,\n          \"pref3\": \"str\"\n        },\n        \"extensions\": [ \"string\", \"string\" ]\n      },\n      \"preferences\": { // Firefox specific.\n                       // Dictionary of preferenceName and preferenceValue.\n                       // Invokes SetPreference method of FirefoxOptions for each item.\n        \"pref1\": true,\n        \"pref2\": 5,\n        \"pref3\": \"str\"\n      },\n      \"mobileEmulationDeviceName\": \"string\", // Chrome and Edge specific.\n                                             // Invokes EnableMobileEmulation(string deviceName) method of ChromeOptions.\n      \"mobileEmulationDeviceSettings\": { // Chrome and Edge specific.\n                                         // Configures instance of OpenQA.Selenium.Chromium.ChromiumMobileEmulationDeviceSettings type.\n                                         // Invokes EnableMobileEmulation(ChromiumMobileEmulationDeviceSettings deviceSettings) method of ChromeOptions.\n        \"userAgent\": \"string\",\n        \"width\": 100,\n        \"height\": 100,\n        \"pixelRation\": 1.5,\n        \"enableTouchEvents\": true\n      },\n      \"androidOptions\": { // Chrome, Firefox and Edge specific.\n        \"androidPackage\": \"pack1\",\n        \"androidDeviceSerial\": \"serial\",\n        \"androidActivity\": \"act1\",\n        \"useRunningApp\": true, // Chrome specific.\n        \"androidProcess\": \"proc\", // Chrome specific.\n        \"androidIntentArguments\": [ \"arg1\", \"arg2\" ] // Firefox specific.\n      },\n      \"{{driverOptionsPropertyName}}\": \"value\" // Any property of driver specific options (e.g.: ChromeOptions).\n    },\n    \"service\": { // Configures driver service.\n      \"driverPath\": \"string\", // Sets absolute or relative driver directory path.\n                              // Allows \"{basedir}\" value at the beginning that equals AppDomain.CurrentDomain.BaseDirectory.\n      \"driverExecutableFileName\": \"string\", // Sets the name of the driver executable file.\n      \"{{driverServicePropertyName}}\": \"value\" // Any property of driver specific service (e.g.: ChromeDriverService).\n    },\n    \"commandTimeout\": 60, // Sets the command timeout in seconds.\n    \"portsToIgnore\": [ 60001, 60002 ] // Sets the ports to ignore while creating driver service.\n  },\n  \"driverInitializationStage\": \"string\", // Supports: \"none\", \"build\" and \"onDemand\".\n\n  \"baseUrl\": \"string\",\n  \"culture\": \"string\", // For example: \"en-US\".\n  \"artifactsPathTemplate\": \"string\",\n\n  \"defaultControlVisibility\": \"string\", // Supports: \"any\" (default), \"visible\" and \"invisible\".\n\n  \"baseRetryTimeout\": 5, // Sets the base retry timeout in seconds.\n  \"baseRetryInterval\": 0.5, // Sets the base retry interval in seconds.\n  \"elementFindTimeout\": 5, // Sets the element find timeout in seconds.\n  \"elementFindRetryInterval\": 0.5, // Sets the element find retry interval in seconds.\n  \"waitingTimeout\": 5, // Sets the waiting timeout in seconds.\n  \"waitingRetryInterval\": 0.5, // Sets the waiting retry interval in seconds.\n  \"verificationTimeout\": 5, // Sets the verification timeout in seconds.\n  \"verificationRetryInterval\": 0.5, // Sets the verification retry interval in seconds.\n\n  \"variables\": {\n    \"{{anyVariableName}}\": \"value\" // Any custom variable. Value can be string, number or boolean.\n  },\n\n  \"assertionExceptionType\": \"string\", // Replaces Atata.AssertionException type with custom type, e.g.: \"NUnit.Framework.AssertionException, nunit.framework\".\n  \"aggregateAssertionExceptionType\": \"string\", // Replaces Atata.AggregateAssertionException type with custom type, e.g.: \"MyApp.AggregateAssertionException, MyApp.Library\".\n  \"aggregateAssertionStrategyType\": \"string\", // Sets the type name of the aggregate assertion strategy. The type should implement IAggregateAssertionStrategy.\n  \"warningReportStrategyType\": \"string\", // Sets the type name of the strategy for warning assertion reporting. The type should implement IWarningReportStrategy.\n  \"assertionFailureReportStrategyType\": \"string\", // Sets the type name of the strategy for assertion failure reporting. The type should implement IAssertionFailureReportStrategy.\n\n  \"domTestIdAttributeName\": \"data-testid\",\n  \"domTestIdAttributeDefaultCase\": \"kebab\",\n\n  \"defaultAssemblyNamePatternToFindTypes\": \"regex_string\",\n  \"assemblyNamePatternToFindComponentTypes\": \"regex_string\",\n  \"assemblyNamePatternToFindAttributeTypes\": \"regex_string\",\n  \"assemblyNamePatternToFindEventTypes\": \"regex_string\",\n  \"assemblyNamePatternToFindEventHandlerTypes\": \"regex_string\",\n\n  \"useAllNUnitFeatures\": true, // Indicates to enable all Atata features for NUnit.\n  \"useSpecFlowNUnitFeatures\": true, // Indicates to enable all Atata features for SpecFlow+NUnit.\n  // Or enable particular NUnit configuration options:\n  \"useNUnitTestName\": true,\n  \"useNUnitTestSuiteName\": true,\n  \"useNUnitTestSuiteType\": true,\n  \"useNUnitAggregateAssertionStrategy\": true, // Indicates to use NUnitAggregateAssertionStrategy as the aggregate assertion strategy.\n  \"useNUnitWarningReportStrategy\": true, // Indicates to use NUnitWarningReportStrategy as the strategy for warning assertion reporting.\n  \"useNUnitAssertionFailureReportStrategy\": true, // Indicates to use NUnitAssertionFailureReportStrategy as the strategy for assertion failure reporting.\n\n  \"logConsumers\": [ // Configures list of log consumers.\n    {\n      \"type\": \"nunit\", // Supports: \"debug\", \"trace\", \"console\", \"nunit\", \"nlog\", \"nlog-file\", \"log4net\"\n                       // and custom consumers registered via LogConsumerAliases.Register method.\n                       // Custom ILogConsumer type can also be passed as a full type name, e.g.: \"Namespace.Class, MyAssembly\".\n      \"minLevel\": \"info\", // Supports: \"trace\", \"debug\", \"info\", \"warn\", \"error\", \"fatal\".\n      \"sectionEnd\": \"include\", // Supports: \"include\", \"includeForBlocks\", \"exclude\".\n      \"messageNestingLevelIndent\": \"- \",\n      \"messageStartSectionPrefix\": \"\u003e \",\n      \"messageEndSectionPrefix\": \"\u003c \",\n      \"{{logConsumerPropertyName}}\": \"value\" // Any property of log consumer.\n    }\n  ],\n\n  \"screenshots\": { // Configures screenshots functionality.\n    \"fileNameTemplate\": \"string\",\n    \"strategy\": {\n      \"type\": \"webDriverViewport\", // Supports: \"webDriverViewport\", \"webDriverFullPage\", \"cdpFullPage\", \"fullPageOrViewport\",\n                                   // and name of custom type implementing \"Atata.IScreenshotTakeStrategy\".\n      \"{{strategyValueName}}\": \"value\" // Any property or constructor parameter of strategy.\n    }\n  },\n\n  \"pageSnapshots\": { // Configures page snapshots functionality.\n    \"fileNameTemplate\": \"string\",\n    \"strategy\": {\n      \"type\": \"cdpOrPageSource\", // Supports: \"cdpOrPageSource\", \"pageSource\", \"cdp\",\n                                 // and name of custom type implementing \"Atata.IPageSnapshotTakeStrategy\".\n      \"{{strategyValueName}}\": \"value\" // Any property or constructor parameter of strategy.\n    }\n  },\n\n  \"browserLogs\": { // Configures browser logs monitoring, which isn't enabled by default.\n    \"log\": true,\n    \"minLevelOfWarning\": \"warn\" // Supports: \"trace\", \"debug\", \"info\", \"warn\", \"error\", \"fatal\".\n  },\n\n  \"eventSubscriptions\": [\n    {\n      \"eventType\": \"event type\", // Optional.\n      \"handlerType\": \"handler type\", // Required.\n      \"{{handlerValueName}}\": \"value\" // Any property or constructor parameter of event handler.\n    }\n  ],\n\n  \"attributes\": { // Configures context attributes.\n    \"global\": [\n      {\n        \"type\": \"attribute type\",\n        \"{{attributeValueName}}\": \"value\" // Any property or constructor parameter of attribute.\n      }\n    ],\n    \"assembly\": [\n      {\n        \"name\": \"assembly name\",\n        \"attributes\": [\n          {\n            \"type\": \"attribute type\",\n            \"{{attributeValueName}}\": \"value\" // Any property or constructor parameter of attribute.\n          }\n        ]\n      }\n    ],\n    \"component\": [\n      {\n        \"type\": \"component type\",\n        \"attributes\": [\n          {\n            \"type\": \"attribute type\",\n            \"{{attributeValueName}}\": \"value\" // Any property or constructor parameter of attribute.\n          }\n        ],\n        \"properties\": [\n          {\n            \"name\": \"property name\",\n            \"attributes\": [\n              {\n                \"type\": \"attribute type\",\n                \"{{attributeValueName}}\": \"value\" // Any property or constructor parameter of attribute.\n              }\n            ]\n          }\n        ]\n      }\n    ]\n  }\n}\n```\n\n### Type Name Values\n\nThere are a few ways to specify a type name, for example, of attribute or component:\n\n- Full assembly-qualified name: `Product.Lib.SomeClass, Product.Lib`\n- Namespace-qualified name: `Product.Lib.SomeClass`\n- Partial namespace-qualified name: `Lib.SomeClass`\n- Just type name: `SomeClass`\n\nFind out more information on [AssemblyQualifiedName](https://docs.microsoft.com/en-us/dotnet/api/system.type.assemblyqualifiedname) docs,\nwhich also contains information about a format of generic and nested type names.\n\n## Feedback\n\nAny feedback, issues and feature requests are welcome.\n\nIf you faced an issue please report it to [Atata.Configuration.Json Issues](https://github.com/atata-framework/atata-configuration-json/issues),\nwrite to [Atata.Configuration.Json Gitter](https://gitter.im/atata-framework/atata-configuration-json)\nor just mail to yevgeniy.shunevych@gmail.com.\n\n## License\n\nAtata is an open source software, licensed under the Apache License 2.0.\nSee [LICENSE](LICENSE) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fatata-framework%2Fatata-configuration-json","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fatata-framework%2Fatata-configuration-json","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fatata-framework%2Fatata-configuration-json/lists"}