README.md

# Driver8

**Best choice for writing a [WebDriver](https://www.w3.org/TR/webdriver/) remote end**

Driver8 provides everything you need to build a Webdriver extension. This is *not* a wrapper for
your Selenium tests, but a basis for [Remote end](https://www.w3.org/TR/webdriver/#dfn-remote-ends).
Similar to what [Appium](http://appium.io/) does for Mobile testing, you can create your own extension and
use it via standard W3C Webdriver wire protocol.

## Getting started
You can give the Driver8 a try without adding any functionality. Driver8 has two components:
 * `Driver8.Plug` -  [Plug](https://hexdocs.pm/plug/readme.html) that takes care of capturing REST requests to your driver
 * `Driver8` - Main process (in a form of [GenServer](https://hexdocs.pm/elixir/GenServer.html)) that handles the requests 
 passed to it by `Driver8.Plug` or any other process.

To bootstrap Driver8 application you will need a http server. For this demo we will use [Cowboy](https://hex.pm/packages/cowboy)
server. Run `mix new demo` to create a new mix application called `demo`. Switch to your demo folder `cd demo`. Change 
your mix.exs to look like this (project section should already look like this, you simply need to adjust application and deps sections):

  defmodule Demo.MixProject do
  use Mix.Project
      def project do
        [
          app: :demo,
          version: "0.1.0",
          elixir: "~> 1.10",
          start_permanent: Mix.env() == :prod,
          deps: deps()
        ]
      end

      def application do
        [
          extra_applications: [:logger, :cowboy, :plug, :jason, :eex],
          mod: {Demo, []},
          env: [
            port: 8085
          ]
        ]
      end

      defp deps do
        [
          {:httpoison, "~> 1.6"},
          {:plug_cowboy, "~> 2.0"},
          {:driver8, "~> 0.1-dev"}
        ]
      end
  end

Now update your main module `Demo` (found in `lib/demo.ex`) to look like this:

  defmodule Demo do
      use Application

      def start(_type, _args) do
        children = [
          Plug.Adapters.Cowboy.child_spec(
            scheme: :http,
            plug: Driver8.Plug,
            options: [ port: 8085 ]
          ), Driver8 ]

        Supervisor.start_link(children, [strategy: :one_for_one, name: Demo.Supervisor])
      end
  end

After that you need to get dependencies by running `mix deps.get`. Now you can start application by running `iex -S mix`.
If all goes according to plan then after you open your browser and point it at [http://localhost:8085/] you should see a
greeting message similar to this: `You are using Driver 8 (elixir) 0.1.0`. Another route that should work is [http://localhost:8085/status].
It should return you a json with a message and `ready` status of the driver process.

Congrats, you are running you very own webdriver extension! It can handle session creation, but that is about it. So let's
make it a bit more interesting.

## Adding a simple extension
...