 
   defp make_request(method, url, body), do: make_request(method, url, body, 0, [])
 
+  @spec make_request(method, url, String.t() | map, non_neg_integer(), [String.t()]) ::
+          {:ok, response}
+          | {:error, web_driver_error_reason | Jason.DecodeError.t() | String.t()}
+          | no_return
   defp make_request(_, _, _, 5, retry_reasons) do
     ["Wallaby had an internal issue with HTTPoison:" | retry_reasons]
     |> Enum.uniq()

  response.
  """
  @spec request(method, url, params, [request_opts]) ::
          {:ok, any}
          | {:error, :invalid_selector}
          | {:error, :stale_reference}
          | {:error, :httpoison}

  def request(method, url, params \\ %{}, opts \\ [])


    end
  end

  @spec handle_response({:ok, HTTPoison.Response.t()} | {:error, HTTPoison.Error.t()}) ::
          {:ok, response}
          | {:error, web_driver_error_reason | Jason.DecodeError.t() | String.t()}
          | {:error, :httpoison, HTTPoison.Error.t()}
          | no_return
  defp handle_response(resp) do
    case resp do
      {:error, %HTTPoison.Error{} = error} ->
