Packages
pages
1.3.1
4.1.0
4.0.0
3.5.0
3.4.2
3.4.1
3.4.0
3.3.0
3.2.0
3.1.0
3.0.1
3.0.0
2.3.0
2.2.1
2.2.0
2.1.1
2.1.0
2.0.0
1.3.1
1.3.0
1.2.0
1.1.0
1.0.3
1.0.2
1.0.1
1.0.0
0.14.0
0.13.4
0.13.3
0.13.2
0.13.1
0.13.0
0.12.0
0.11.1
0.11.0
0.10.1
0.10.0
0.9.0
0.8.0
0.7.1
0.7.0
0.6.2
0.6.1
0.6.0
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.3
0.4.2
0.4.1
0.4.0
0.3.1
0.3.0
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.0
Page pattern for interacting with web pages
Current section
Files
Jump to
Current section
Files
lib/pages/driver.ex
defmodule Pages.Driver do
# @related [conn driver](lib/pages/driver/conn.ex)
# @related [live view driver](lib/pages/driver/live_view.ex)
@moduledoc """
Defines types and behaviours that page drivers must implement.
"""
alias HtmlQuery, as: Hq
@type t() ::
Pages.Driver.Conn.t()
| Pages.Driver.LiveView.t()
@doc "Click an element within a page. Implementation for `Pages.click/4`."
@callback click(Pages.Driver.t(), Pages.http_method(), Pages.text_filter() | nil, Hq.Css.selector()) ::
Pages.result() | no_return()
@doc "Wait for a server-issued redirect. Implementation for `Pages.handle_redirect/1`."
@callback handle_redirect(Pages.Driver.t()) :: Pages.result()
@doc "Render a change. Implementation for `Pages.render_change/3`."
@callback render_change(Pages.Driver.t(), Hq.Css.selector(), Enum.t()) :: Pages.result()
@doc "Render a file upload. Implementation for `Pages.render_upload/4`."
@callback render_upload(Pages.Driver.t(), Pages.live_view_upload(), binary(), integer()) :: Pages.result()
@doc "Render a hook event. Implementation for `Pages.render_hook/3`."
@callback render_hook(Pages.Driver.t(), binary(), Pages.attrs_t(), keyword()) :: Pages.result()
@doc "Re-renders the page. Implementation for `Pages.rerender/1`."
@callback rerender(Pages.Driver.t()) :: Pages.result()
@doc "Submit a form targeted by the given selector. Implementation for `Pages.submit_form/2`."
@callback submit_form(Pages.Driver.t(), Hq.Css.selector()) :: Pages.result()
@doc "Fills in a form with the attributes and submits it. Implementation for `Pages.submit_form/4`."
@callback submit_form(Pages.Driver.t(), Hq.Css.selector(), atom(), Pages.attrs_t()) :: Pages.result()
@doc "Fills in a form with the attributes and submits it. Implementation for `Pages.submit_form/5`."
@callback submit_form(Pages.Driver.t(), Hq.Css.selector(), atom(), Pages.attrs_t(), Pages.attrs_t()) ::
Pages.result()
@doc "Fills in a form with the attributes without submitting it. Implementation for `Pages.update_form/4`."
@callback update_form(Pages.Driver.t(), Hq.Css.selector(), atom(), Pages.attrs_t()) :: Pages.result()
@doc "Navigate directly to a page. Implementation for `Pages.visit/2`."
@callback visit(Pages.Driver.t(), Path.t()) :: Pages.result()
@doc "Target a child component for actions. Implementation for `Pages.with_child_component/3`."
@callback with_child_component(Pages.Driver.t(), child_id :: binary(), (Pages.Driver.t() -> term())) ::
Pages.Driver.t()
@optional_callbacks [
click: 4,
handle_redirect: 1,
render_change: 3,
render_upload: 4,
render_hook: 4,
rerender: 1,
submit_form: 2,
submit_form: 4,
submit_form: 5,
update_form: 4,
with_child_component: 3
]
end