{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "custom_commands_path",
    "custom_assertions_path",
    "page_objects_path",
    "globals_path",
    "globals",
    "dotenv",
    "persist_globals",
    "output_folder",
    "src_folders",
    "live_output",
    "disable_colors",
    "parallel_process_delay",
    "selenium",
    "start_session",
    "end_session_on_fail",
    "test_workers",
    "test_runner",
    "webdriver",
    "test_settings",
    "launch_url",
    "silent",
    "output",
    "detailed_output",
    "output_timestamp",
    "disable_error_log",
    "screenshots",
    "log_screenshot_data",
    "desiredCapabilities",
    "exclude",
    "filter",
    "skipgroup",
    "sync_test_names",
    "skiptags",
    "use_xpath",
    "parallel_mode",
    "report_prefix",
    "unit_tests_mode",
    "default_reporter"
  ],
  "properties": {
    "custom_commands_path": { "type": "null" },
    "custom_assertions_path": { "type": "null" },
    "page_objects_path": { "type": "null" },
    "globals_path": { "type": "null" },
    "globals": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "abortOnAssertionFailure",
        "abortOnElementLocateError",
        "waitForConditionPollInterval",
        "waitForConditionTimeout",
        "throwOnMultipleElementsReturned",
        "suppressWarningsOnMultipleElementsReturned",
        "asyncHookTimeout",
        "unitTestsTimeout",
        "customReporterCallbackTimeout",
        "retryAssertionTimeout"
      ],
      "properties": {
        "abortOnAssertionFailure": { "type": "boolean" },
        "abortOnElementLocateError": { "type": "boolean" },
        "waitForConditionPollInterval": {
          "type": "integer",
          "minimum": 0
        },
        "waitForConditionTimeout": {
          "type": "integer",
          "minimum": 0
        },
        "throwOnMultipleElementsReturned": { "type": "boolean" },
        "suppressWarningsOnMultipleElementsReturned": { "type": "boolean" },
        "asyncHookTimeout": {
          "type": "integer",
          "minimum": 0
        },
        "unitTestsTimeout": {
          "type": "integer",
          "minimum": 0
        },
        "customReporterCallbackTimeout": {
          "type": "integer",
          "minimum": 0
        },
        "retryAssertionTimeout": {
          "type": "integer",
          "minimum": 0
        }
      }
    },
    "dotenv": {
      "type": "object",
      "additionalProperties": false
    },
    "persist_globals": { "type": "boolean" },
    "output_folder": { "type": "string" },
    "src_folders": { "type": "null" },
    "live_output": { "type": "boolean" },
    "disable_colors": { "type": "boolean" },
    "parallel_process_delay": {
      "type": "integer",
      "minimum": 0
    },
    "selenium": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "start_process",
        "cli_args",
        "server_path",
        "log_path",
        "check_process_delay",
        "max_status_poll_tries",
        "status_poll_interval"
      ],
      "properties": {
        "start_process": { "type": "boolean" },
        "cli_args": {
          "type": "object",
          "additionalProperties": false
        },
        "server_path": { "type": "null" },
        "log_path": { "type": "string" },
        "check_process_delay": {
          "type": "integer",
          "minimum": 0
        },
        "max_status_poll_tries": {
          "type": "integer",
          "minimum": 0
        },
        "status_poll_interval": {
          "type": "integer",
          "minimum": 0
        }
      }
    },
    "start_session": { "type": "boolean" },
    "end_session_on_fail": { "type": "boolean" },
    "test_workers": { "type": "boolean" },
    "test_runner": { "type": "string" },
    "webdriver": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "start_process",
        "cli_args",
        "server_path",
        "log_path",
        "check_process_delay",
        "max_status_poll_tries",
        "status_poll_interval",
        "process_create_timeout",
        "timeout_options"
      ],
      "properties": {
        "start_process": { "type": "boolean" },
        "cli_args": {
          "type": "object",
          "additionalProperties": false
        },
        "server_path": { "type": "null" },
        "log_path": { "type": "string" },
        "check_process_delay": {
          "type": "integer",
          "minimum": 0
        },
        "max_status_poll_tries": {
          "type": "integer",
          "minimum": 0
        },
        "status_poll_interval": {
          "type": "integer",
          "minimum": 0
        },
        "process_create_timeout": {
          "type": "integer",
          "minimum": 0
        },
        "timeout_options": {
          "type": "object",
          "additionalProperties": false
        }
      }
    },
    "test_settings": {
      "type": "object",
      "additionalProperties": false
    },
    "launch_url": { "type": "string" },
    "silent": { "type": "boolean" },
    "output": { "type": "boolean" },
    "detailed_output": { "type": "boolean" },
    "output_timestamp": { "type": "boolean" },
    "disable_error_log": { "type": "boolean" },
    "screenshots": { "type": "boolean" },
    "log_screenshot_data": { "type": "boolean" },
    "desiredCapabilities": {
      "type": "object",
      "additionalProperties": false,
      "required": [ "browserName" ],
      "properties": {
        "browserName": {
          "type": "string"
        }
      }
    },
    "exclude": { "type": "null" },
    "filter": { "type": "null" },
    "skipgroup": { "type": "string" },
    "sync_test_names": { "type": "boolean" },
    "skiptags": { "type": "string" },
    "use_xpath": { "type": "boolean" },
    "parallel_mode": { "type": "boolean" },
    "report_prefix": { "type": "string" },
    "unit_tests_mode": { "type": "boolean" },
    "default_reporter": { "type": "string" }
  }
}
