lib/wallaby/dsl.ex
defmodule Wallaby.DSL do
@moduledoc """
Sets up the Wallaby DSL in a module.
All functions in `Wallaby.Browser` are now accessible without a module name
and `Wallaby.Browser`, `Wallaby.Element` and `Wallaby.Query` are all aliased.
## Example
```elixir
defmodule MyPage do
use Wallaby.DSL
@name_field Query.text_field("Name")
@email_field Query.text_field("email")
@save_button Query.button("Save")
def register(session) do
session
|> visit("/registration.html")
|> fill_in(@name_field, with: "Chris")
|> fill_in(@email_field, with: "c@keathly.io")
|> click(@save_button)
end
end
```
"""
defmacro __using__([]) do
quote do
alias Wallaby.Browser
alias Wallaby.Element
alias Wallaby.Query
# Kernel.tap/2 was introduced in 1.12 and conflicts with Browser.tap/2
import Kernel, except: [tap: 2]
import Wallaby.Browser
end
end
end