Shared option and option-schema types used by Cerberus public APIs and drivers.
This module centralizes validation and normalized defaults for operation
option lists (click, fill_in, assert_has, submit, and related helpers).
Summary
Types
@type assert_download_opts() :: [{:timeout, pos_integer()}]
@type assert_opts() :: [ visible: visibility_filter(), timeout: non_neg_integer(), count: non_neg_integer() | nil, min: non_neg_integer() | nil, max: non_neg_integer() | nil, between: between_filter() ]
@type assert_value_opts() :: [ timeout: non_neg_integer(), checked: boolean() | nil, disabled: boolean() | nil, selected: boolean() | nil, readonly: boolean() | nil, count: non_neg_integer() | nil, min: non_neg_integer() | nil, max: non_neg_integer() | nil, between: between_filter(), first: boolean(), last: boolean(), nth: pos_integer() | nil, index: non_neg_integer() | nil ]
@type between_filter() :: {non_neg_integer(), non_neg_integer()} | Range.t() | nil
@type browser_add_cookie_opts() :: [ domain: String.t(), path: String.t(), http_only: boolean(), secure: boolean(), same_site: cookie_same_site_opt() ]
@type browser_assert_dialog_opts() :: [timeout: pos_integer(), browser: keyword()]
@type browser_clear_cookies_opts() :: [{:timeout, non_neg_integer()}]
@type browser_cookie_arg() :: [{browser_cookie_arg_key(), browser_cookie_arg_value()}]
@type browser_cookie_arg_key() ::
:name
| :value
| :url
| :domain
| :path
| :http_only
| :secure
| :same_site
| :expires
@type browser_cookie_arg_value() :: String.t() | boolean() | cookie_same_site_opt() | integer() | float()
@type browser_drag_opts() :: [{:timeout, non_neg_integer()}]
@type browser_override_opts() :: [ viewport: {pos_integer(), pos_integer()} | %{width: pos_integer(), height: pos_integer()} | keyword() | nil, user_agent: String.t() | nil, popup_mode: :allow | :same_tab | nil, init_script: String.t() | nil, init_scripts: [String.t()] | nil, ready_timeout_ms: pos_integer() | nil, ready_quiet_ms: pos_integer() | nil, screenshot_full_page: boolean() | nil, screenshot_artifact_dir: String.t() | nil, screenshot_path: String.t() | nil, bidi_command_timeout_ms: pos_integer() | nil, runtime_http_timeout_ms: pos_integer() | nil, dialog_timeout_ms: pos_integer() | nil, webdriver_url: String.t() | nil, chrome_webdriver_url: String.t() | nil, headless: boolean() | nil, slow_mo: non_neg_integer() | nil, chrome_binary: String.t() | nil, chromedriver_binary: String.t() | nil, chrome_startup_retries: non_neg_integer() | nil, chromedriver_log_path: String.t() | nil, startup_log_tail_bytes: non_neg_integer() | nil, startup_log_tail_lines: non_neg_integer() | nil ]
@type browser_press_opts() :: [{:timeout, non_neg_integer()}]
@type browser_session_cookie_arg() :: [ {browser_session_cookie_arg_key(), browser_session_cookie_arg_value()} ]
@type browser_session_cookie_arg_key() ::
:value | :url | :domain | :path | :http_only | :secure | :same_site
@type browser_session_cookie_arg_value() :: session_cookie_value() | String.t() | boolean() | cookie_same_site_opt()
@type browser_type_opts() :: [clear: boolean(), timeout: non_neg_integer()]
@type browser_with_popup_opts() :: [{:timeout, pos_integer()}]
@type check_opts() :: [ timeout: non_neg_integer(), force: boolean(), checked: boolean() | nil, disabled: boolean() | nil, selected: boolean() | nil, readonly: boolean() | nil, count: non_neg_integer() | nil, min: non_neg_integer() | nil, max: non_neg_integer() | nil, between: between_filter(), first: boolean(), last: boolean(), nth: pos_integer() | nil, index: non_neg_integer() | nil ]
@type choose_opts() :: [ timeout: non_neg_integer(), force: boolean(), checked: boolean() | nil, disabled: boolean() | nil, selected: boolean() | nil, readonly: boolean() | nil, count: non_neg_integer() | nil, min: non_neg_integer() | nil, max: non_neg_integer() | nil, between: between_filter(), first: boolean(), last: boolean(), nth: pos_integer() | nil, index: non_neg_integer() | nil ]
@type click_opts() :: [ timeout: non_neg_integer(), force: boolean(), checked: boolean() | nil, disabled: boolean() | nil, selected: boolean() | nil, readonly: boolean() | nil, count: non_neg_integer() | nil, min: non_neg_integer() | nil, max: non_neg_integer() | nil, between: between_filter(), first: boolean(), last: boolean(), nth: pos_integer() | nil, index: non_neg_integer() | nil ]
@type closest_opts() :: [{:from, Cerberus.Locator.t()}]
@type cookie_same_site_opt() :: :strict | :lax | :none | String.t()
@type count_filter_opts() :: [ count: non_neg_integer() | nil, min: non_neg_integer() | nil, max: non_neg_integer() | nil, between: between_filter(), first: boolean(), last: boolean(), nth: pos_integer() | nil, index: non_neg_integer() | nil ]
@type fill_in_opts() :: [ timeout: non_neg_integer(), force: boolean(), checked: boolean() | nil, disabled: boolean() | nil, selected: boolean() | nil, readonly: boolean() | nil, count: non_neg_integer() | nil, min: non_neg_integer() | nil, max: non_neg_integer() | nil, between: between_filter(), first: boolean(), last: boolean(), nth: pos_integer() | nil, index: non_neg_integer() | nil ]
@type locator_filter_opts() :: [ exact: boolean(), normalize_ws: boolean(), checked: boolean() | nil, disabled: boolean() | nil, selected: boolean() | nil, readonly: boolean() | nil, visible: boolean() | nil, count: non_neg_integer() | nil, min: non_neg_integer() | nil, max: non_neg_integer() | nil, between: between_filter(), first: boolean(), last: boolean(), nth: pos_integer() | nil, index: non_neg_integer() | nil, match_by: locator_match_by(), has: Cerberus.Locator.t() | nil, has_not: Cerberus.Locator.t() | nil ]
@type locator_leaf_opts() :: [exact: boolean(), from: Cerberus.Locator.t() | nil]
@type locator_match_by() ::
:text | :label | :link | :button | :placeholder | :title | :alt | :testid
@type path_match_opts() :: [{:exact, boolean()}]
@type path_opts() :: [ exact: boolean(), query: path_query(), timeout: non_neg_integer() ]
@type reload_opts() :: visit_opts()
@type return_result_opts() :: [{:return_result, boolean()}]
@type role_locator_opts() :: [ name: role_locator_name(), exact: boolean(), from: Cerberus.Locator.t() | nil ]
@type select_opts() :: [ option: select_value(), exact_option: boolean(), timeout: non_neg_integer(), force: boolean(), checked: boolean() | nil, disabled: boolean() | nil, selected: boolean() | nil, readonly: boolean() | nil, count: non_neg_integer() | nil, min: non_neg_integer() | nil, max: non_neg_integer() | nil, between: between_filter(), first: boolean(), last: boolean(), nth: pos_integer() | nil, index: non_neg_integer() | nil ]
@type session_browser_opts() :: [ endpoint: module(), timeout_ms: non_neg_integer(), ready_timeout_ms: pos_integer(), ready_quiet_ms: pos_integer(), user_agent: String.t() | nil, browser: browser_override_opts(), webdriver_url: String.t() | nil, chrome_webdriver_url: String.t() | nil, chrome_binary: String.t() | nil, chromedriver_binary: String.t() | nil, chrome_args: [String.t()] | nil, headless: boolean() | nil, slow_mo: non_neg_integer() | nil, chromedriver_port: pos_integer() | nil, chrome_startup_retries: non_neg_integer() | nil, chromedriver_log_path: String.t() | nil, startup_log_tail_bytes: non_neg_integer() | nil, startup_log_tail_lines: non_neg_integer() | nil, base_url: String.t() | nil ]
@type session_common_opts() :: [ endpoint: module(), conn: Plug.Conn.t() | nil, timeout_ms: non_neg_integer() ]
@type submit_opts() :: [ timeout: non_neg_integer(), force: boolean(), checked: boolean() | nil, disabled: boolean() | nil, selected: boolean() | nil, readonly: boolean() | nil, count: non_neg_integer() | nil, min: non_neg_integer() | nil, max: non_neg_integer() | nil, between: between_filter(), first: boolean(), last: boolean(), nth: pos_integer() | nil, index: non_neg_integer() | nil ]
@type upload_opts() :: [ timeout: non_neg_integer(), force: boolean(), checked: boolean() | nil, disabled: boolean() | nil, selected: boolean() | nil, readonly: boolean() | nil, count: non_neg_integer() | nil, min: non_neg_integer() | nil, max: non_neg_integer() | nil, between: between_filter(), first: boolean(), last: boolean(), nth: pos_integer() | nil, index: non_neg_integer() | nil ]
@type visibility_filter() :: boolean() | :any
@type visit_opts() :: []
Functions
@spec assert_download_schema() :: keyword()
@spec assert_schema() :: keyword()
@spec assert_value_schema() :: keyword()
@spec browser_add_cookie_schema() :: keyword()
@spec browser_assert_dialog_schema() :: keyword()
@spec browser_clear_cookies_schema() :: keyword()
@spec browser_drag_schema() :: keyword()
@spec browser_override_schema() :: keyword()
@spec browser_press_schema() :: keyword()
@spec browser_type_schema() :: keyword()
@spec browser_with_popup_schema() :: keyword()
@spec click_schema() :: keyword()
@spec fill_in_schema() :: keyword()
@spec path_schema() :: keyword()
@spec return_result_schema() :: keyword()
@spec screenshot_schema() :: keyword()
@spec select_schema() :: keyword()
@spec session_browser_schema() :: keyword()
@spec session_common_schema() :: keyword()
@spec submit_schema() :: keyword()
@spec upload_schema() :: keyword()
@spec validate_assert!( keyword(), String.t() ) :: assert_opts()
@spec validate_assert_download!(keyword()) :: assert_download_opts()
@spec validate_assert_value!( keyword(), String.t() ) :: assert_value_opts()
@spec validate_browser_add_cookie!(keyword()) :: browser_add_cookie_opts()
@spec validate_browser_assert_dialog!(keyword()) :: browser_assert_dialog_opts()
@spec validate_browser_clear_cookies!(keyword()) :: browser_clear_cookies_opts()
@spec validate_browser_cookie_arg!(browser_cookie_arg(), String.t()) :: browser_cookie_arg()
@spec validate_browser_drag!(keyword()) :: browser_drag_opts()
@spec validate_browser_press!(keyword()) :: browser_press_opts()
@spec validate_browser_session_cookie_arg!(browser_session_cookie_arg(), String.t()) :: browser_session_cookie_arg()
@spec validate_browser_type!(keyword()) :: browser_type_opts()
@spec validate_browser_with_popup!(keyword()) :: browser_with_popup_opts()
@spec validate_check!( keyword(), String.t() ) :: check_opts()
@spec validate_choose!( keyword(), String.t() ) :: choose_opts()
@spec validate_click!(keyword()) :: click_opts()
@spec validate_fill_in!(keyword()) :: fill_in_opts()
@spec validate_return_result!( keyword(), String.t() ) :: return_result_opts()
@spec validate_screenshot!(keyword()) :: screenshot_opts()
@spec validate_select!(keyword()) :: select_opts()
@spec validate_session_browser!(keyword()) :: session_browser_opts()
@spec validate_session_common!(keyword()) :: session_common_opts()
@spec validate_submit!(keyword()) :: submit_opts()
@spec validate_upload!(keyword()) :: upload_opts()