Skip to content

Commit

Permalink
Merge pull request #13 from stuart/feature/elixir-0.15
Browse files Browse the repository at this point in the history
Update to use webdriver 0.5.0
  • Loading branch information
stuart committed Aug 13, 2014
2 parents 1e857a3 + 6b2891a commit 320244b
Show file tree
Hide file tree
Showing 19 changed files with 107 additions and 109 deletions.
12 changes: 7 additions & 5 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,15 @@ language: erlang
notifications:
email: false
otp_release:
- R16B01
- 17.0
env:
- ELIXIR="v0.15.1"
before_install:
- git clone https://github.com/elixir-lang/elixir
- make -C elixir
- mkdir -p vendor/elixir
- wget -q https://github.com/elixir-lang/elixir/releases/download/$ELIXIR/Precompiled.zip && unzip -qq Precompiled.zip -d vendor/elixir
- export MIX_ENV=test
- "export DISPLAY=:99.0"
- "sh -e /etc/init.d/xvfb start"

before_script: "export PATH=`pwd`/elixir/bin:$PATH"
before_script: "export PATH=$PATH:`pwd`/vendor/elixir/bin"
script: "MIX_ENV=test mix do deps.get, deps.compile, test"

20 changes: 12 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ Here is a rough guide to using TucoTuco.

### Elements
The following functions for manipulating elements are imported from
WebDriver, they all take a WebDriver.Element.Reference record as the
WebDriver, they all take a WebDriver.Element struct as the
first argument. Luckily that is exactly what all the finders return:

```elixir
Expand Down Expand Up @@ -238,16 +238,20 @@ Example Session from console:
```

###Changelog
2014-08-12
* 0.5.0
* Elixir-0.15.0
* Webdriver 0.5.0

2014-03-02
* 0.2.1
* Element functions from WebDriver
* Retries
2014-03-06
* 0.4.0
* Added save_screenshot

2014-03-04
* 0.3.0
* Added execute_javascript and execute_async_javascript

2014-03-06
* 0.4.0
* Added save_screenshot
2014-03-02
* 0.2.1
* Element functions from WebDriver
* Retries
8 changes: 5 additions & 3 deletions lib/tuco_tuco.ex
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
defmodule TucoTuco do
use Application.Behaviour
use Application

@moduledoc """
TucoTuco is a web testing suite for Elixir applications.
Expand Down Expand Up @@ -40,7 +40,9 @@ defmodule TucoTuco do
"""

defrecord Config, browser: :phantomjs, name: nil
defmodule Config do
defstruct browser: :phantomjs, name: nil
end

@doc """
Start the TucoTuco application.
Expand Down Expand Up @@ -150,7 +152,7 @@ defmodule TucoTuco do
"""
def start_session browser_name, session_name, driver \\ :phantomjs do
browser_config = WebDriver.Config.new(browser: driver, name: browser_name)
browser_config = %WebDriver.Config{browser: driver, name: browser_name}
:gen_server.call :tuco_tuco, {:start_session, browser_config, session_name}
end

Expand Down
4 changes: 2 additions & 2 deletions lib/tuco_tuco/dsl.ex
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ defmodule TucoTuco.DSL do
* :null
* A number.
* A string.
* A WebDriver.Element.Reference record.
* A WebDriver.Element struct.
* A tuple list (Javacript object.)
* A list of any of these.
Expand Down Expand Up @@ -136,7 +136,7 @@ defmodule TucoTuco.DSL do
end

defp handle_js_response [{"ELEMENT", id}] do
WebDriver.Element.Reference.new(id: id, session: current_session)
%WebDriver.Element{id: id, session: current_session}
end

defp handle_js_response response do
Expand Down
2 changes: 1 addition & 1 deletion lib/tuco_tuco/page.ex
Original file line number Diff line number Diff line change
Expand Up @@ -242,7 +242,7 @@ defmodule TucoTuco.Page do
end

def is_element? element do
is_record(element, WebDriver.Element.Reference)
is_map(element) && element.__struct__ == WebDriver.Element
end

def is_not_element? element do
Expand Down
35 changes: 18 additions & 17 deletions lib/tuco_tuco/session_pool.ex
Original file line number Diff line number Diff line change
@@ -1,31 +1,32 @@
defmodule TucoTuco.SessionPool do
use GenServer.Behaviour
use GenServer

@moduledoc """
The session pool is responsible for maintaining state which references
the underlying WebDriver sessions that are running.
"""

defrecord SessionPoolState,
current_session: nil,
app_root: nil,
use_retry: false,
max_retry_time: 2000,
retry_delay: 50
defmodule SessionPoolState do
defstruct current_session: nil,
app_root: nil,
use_retry: false,
max_retry_time: 2000,
retry_delay: 50
end


def start_link do
state = SessionPoolState.new
state = %SessionPoolState{}
:gen_server.start_link({:local, :tuco_tuco},__MODULE__, state, [])
end

def init _ do
{:ok, SessionPoolState.new}
{:ok, %SessionPoolState{}}
end

def handle_call {:current_session, new_session}, _sender, state do
case :lists.member( new_session, WebDriver.sessions ) do
true -> new_state = state.current_session(new_session)
true -> new_state = %{state | current_session: new_session}
{:reply, {:ok, new_state.current_session}, new_state}
false -> {:reply, {:error, "Session :#{new_session} is not running."}, state}
end
Expand All @@ -36,7 +37,7 @@ defmodule TucoTuco.SessionPool do
if :lists.member( state.current_session, WebDriver.sessions ) do
{:reply, {:ok, state.current_session}, state}
else
{:reply, {:ok, nil}, state.current_session(nil)}
{:reply, {:ok, nil}, %{state | current_session: nil}}
end
end

Expand All @@ -45,7 +46,7 @@ defmodule TucoTuco.SessionPool do
end

def handle_call {:app_root, new_app_root}, _sender, state do
state = state.app_root(new_app_root)
state = %{state | app_root: new_app_root}
{:reply, {:ok, state}, state}
end

Expand All @@ -58,7 +59,7 @@ defmodule TucoTuco.SessionPool do
end

def handle_call({:use_retry, value}, _sender, state) when is_boolean(value) do
state = state.use_retry(value)
state = %{state | use_retry: value}
{:reply, {:ok, state}, state}
end

Expand All @@ -67,16 +68,16 @@ defmodule TucoTuco.SessionPool do
end

def handle_call({:max_retry_time, value}, _sender, state) when is_integer(value) and value > 0 do
state = state.max_retry_time(value)
state = %{state | max_retry_time: value}
{:reply, {:ok, state}, state}
end

def handle_call :retry_delay, _sender, state do
{:reply, {:ok, state.max_retry_time}, state}
{:reply, {:ok, state.retry_delay}, state}
end

def handle_call({:retry_delay, value}, _sender, state) when is_integer(value) and value > 0 do
state = state.max_retry_time(value)
state = %{state | retry_delay: value}
{:reply, {:ok, state}, state}
end

Expand All @@ -88,7 +89,7 @@ defmodule TucoTuco.SessionPool do
false -> WebDriver.start_browser browser_config
{:ok, _session} = WebDriver.start_session browser_config.name, session_name
end
state = state.current_session(session_name)
state = %{state | current_session: session_name}
{:reply, {:ok, state}, state}
end
end
4 changes: 2 additions & 2 deletions lib/tuco_tuco/supervisor.ex
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
defmodule TucoTuco.Supervisor do
use Supervisor.Behaviour

use Supervisor
def start_link do
:supervisor.start_link {:local, :tucotuco}, __MODULE__, []
end
Expand Down
29 changes: 12 additions & 17 deletions mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -3,35 +3,30 @@ defmodule TucoTuco.Mixfile do

def project do
[ app: :tuco_tuco,
version: "0.4.0",
elixir: "~> 0.12.3",
env: [
dev: [ deps: deps ++ dev_deps ],
test: [ deps: deps ++ test_deps ],
prod: [ deps: deps ]
]
version: "0.5.0",
elixir: "~> 0.15.1",
source_url: "https://github.com/stuart/tuco_tuco",
homepage_url: "http://stuart.github.io/tuco_tuco",
deps: deps(Mix.env)
]
end

# Configuration for the OTP application
def application do
[mod: { TucoTuco, [] }, applications: [ :webdriver ]]
[ mod: { TucoTuco, [] },
applications: [ :webdriver ]
]
end

# Returns the list of dependencies in the format:
# { :foobar, git: "https://github.com/elixir-lang/foobar.git", tag: "0.1" }
#
# To specify particular versions, regardless of the tag, do:
# { :barbat, "~> 0.1", github: "elixir-lang/barbat" }
defp deps do
[ {:webdriver, github: "stuart/elixir-webdriver"} ]
end

defp test_deps do
[]
defp deps :test do
deps ++ []
end

defp dev_deps do
[]
defp deps _ do
deps
end
end
13 changes: 5 additions & 8 deletions mix.lock
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
[ "ex_doc": {:git, "git://github.com/elixir-lang/ex_doc.git", "e6386d3f81a9d46bbd9b6f3e4f7c5f1273f465f1", []},
"httpotion": {:git, "git://github.com/myfreeweb/httpotion.git", "f9407c497ce8e71ebea8cf94d08b093f90afa5bb", []},
"ibrowse": {:git, "git://github.com/cmullaparthi/ibrowse.git", "108c131d782c693bd3e26a6587da8196ef9282e3", []},
"jsonex": {:git, "git://github.com/marcelog/jsonex.git", "ca46642855db2df0ae91253e448706fef26df57e", []},
"jsx": {:git, "git://github.com/talentdeficit/jsx.git", "cb14b92a228e51f7bdcaa7eb17f035e4a5c0b47d", [tag: "v1.3.3"]},
"meck": {:git, "git://github.com/eproxus/meck.git", "2447206f201bab1054c49cd32621eee23fa0ee3b", [tag: "0.7.2"]},
"mock": {:git, "git://github.com/jjh42/mock.git", "e54a8f8ac3b69b5a610399f7fb5efe65446526eb", []},
"webdriver": {:git, "git://github.com/stuart/elixir-webdriver.git", "4ec58b8770bbcc8c8693644b66069feb70003989", []} ]
%{"httpotion": {:git, "git://github.com/myfreeweb/httpotion.git", "1419c64468483d192cc017f18de3412f9dca7fb4", []},
"ibrowse": {:git, "git://github.com/cmullaparthi/ibrowse.git", "7871e2ebe8811efb64e1917e2de455fa87e8dfe3", [tag: "v4.1.0"]},
"jsonex": {:git, "git://github.com/marcelog/jsonex.git", "82e6c416eed5e791073427bf3079d7ab7b85a1e1", []},
"jsx": {:git, "git://github.com/talentdeficit/jsx.git", "507fa4c41db33c81e925ab53f4d789d234aaff2f", []},
"webdriver": {:git, "git://github.com/stuart/elixir-webdriver.git", "769945df6a3531b4bfd824a739d3cec3c00d8977", []}}
3 changes: 1 addition & 2 deletions package.exs
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
Expm.Package.new( name: "Tuco Tuco",
description: "Integration testing tool for web applications.",
version: "0.4.0",
version: "0.5.0",
keywords: ["Elixir", "Selenium", "WebDriver", "library", "testing"],
homepage: "http://stuart.github.io/tuco_tuco",
maintainers: [[ name: "Stuart Coyle",
email: "[email protected]"]],
repositories: [[ github: "stuart/tuco_tuco"]]
)

9 changes: 4 additions & 5 deletions test/actions_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,13 @@ defmodule TucoTucoActionsTest do
setup_all do
http_server_pid = TucoTuco.TestServer.start
TucoTuco.start_session :test_browser, :tuco_test, :phantomjs
on_exit fn ->
TucoTuco.stop
TucoTuco.TestServer.stop(http_server_pid)
end
{:ok, [http_server_pid: http_server_pid]}
end

teardown_all meta do
TucoTuco.stop
TucoTuco.TestServer.stop(meta[:http_server_pid])
end

setup do
{:ok, _} = visit_index
:ok
Expand Down
9 changes: 4 additions & 5 deletions test/assertions_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,13 @@ defmodule TucoTucoAssertionsTest do
setup_all do
http_server_pid = TucoTuco.TestServer.start
TucoTuco.start_session :test_browser, :tuco_test, :phantomjs
on_exit fn ->
TucoTuco.stop
TucoTuco.TestServer.stop(http_server_pid)
end
{:ok, [http_server_pid: http_server_pid]}
end

teardown_all meta do
TucoTuco.stop
TucoTuco.TestServer.stop(meta[:http_server_pid])
end

setup do
{:ok, _} = visit_index
:ok
Expand Down
15 changes: 7 additions & 8 deletions test/dsl_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,13 @@ defmodule TucoTucoDSLTest do
setup_all do
http_server_pid = TucoTuco.TestServer.start
TucoTuco.start_session :test_browser, :tuco_test, :phantomjs
on_exit fn ->
TucoTuco.stop
TucoTuco.TestServer.stop(http_server_pid)
end
{:ok, [http_server_pid: http_server_pid]}
end

teardown_all meta do
TucoTuco.stop
TucoTuco.TestServer.stop(meta[:http_server_pid])
end

setup do
visit_index
:ok
Expand Down Expand Up @@ -77,13 +76,13 @@ defmodule TucoTucoDSLTest do

test "execute javascript returning a page element" do
click_link "Page 2" # Page 2 has JQuery
assert WebDriver.Element.Reference[id: _, session: :tuco_test] = execute_javascript("return $('a#appear')[0]")
assert %WebDriver.Element{id: _, session: :tuco_test} = execute_javascript("return $('a#appear')[0]")
end

test "execute javascript returning an array of elements" do
click_link "Page 2"
assert [WebDriver.Element.Reference[id: _, session: :tuco_test],
WebDriver.Element.Reference[id: _, session: :tuco_test]] = execute_javascript("return $('p')")
assert [%WebDriver.Element{id: _, session: :tuco_test},
%WebDriver.Element{id: _, session: :tuco_test}] = execute_javascript("return $('p')")
end

test "make sure that elements from Javascript can be used in other calls" do
Expand Down
9 changes: 4 additions & 5 deletions test/element_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,13 @@ defmodule TucoTucoElementTest do
http_server_pid = TucoTuco.TestServer.start
TucoTuco.start_session :test_browser, :tuco_test, :phantomjs
TucoTuco.app_root "http://localhost:8889"
on_exit fn ->
TucoTuco.stop
TucoTuco.TestServer.stop(http_server_pid)
end
{:ok, [http_server_pid: http_server_pid]}
end

teardown_all meta do
TucoTuco.stop
TucoTuco.TestServer.stop(meta[:http_server_pid])
end

setup do
{:ok, _} = visit("index.html")
:ok
Expand Down
Loading

0 comments on commit 320244b

Please sign in to comment.