diff --git a/.hgignore b/.hgignore
--- a/.hgignore
+++ b/.hgignore
@@ -8,3 +8,4 @@ tmp/
dist/
django_conntrackt.egg-info/
projtect/.coverage
+test_binaries/
\ No newline at end of file
diff --git a/MANIFEST.in b/MANIFEST.in
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -27,4 +27,5 @@ recursive-include conntrackt/templates *
recursive-include docs *
recursive-include requirements *
recursive-exclude * *.py[co]
-recursive-exclude docs/_build *
\ No newline at end of file
+recursive-exclude docs/_build *
+recursive-exclude test_binaries *
\ No newline at end of file
diff --git a/docs/development.rst b/docs/development.rst
--- a/docs/development.rst
+++ b/docs/development.rst
@@ -62,6 +62,40 @@ 4. Install required packages in the virt
workon conntrackt && pip install -r ~/projects/conntrackt/requirements/development.txt
+5. Download and unpack `Mozilla Firefox
+ `_ version **57.0.x** for
+ your platform into directory ``test_binaries/``. If using 64-bit
+ GNU/Linux distribution, this should be as easy as:
+
+ .. warning::
+ In order to ensure the functional tests run well, it is
+ important to use correct combination of geckodriver and Mozilla
+ Firefox.
+
+ ::
+
+ workon conntrackt && \
+ cd test_binaries/ && \
+ wget 'https://ftp.mozilla.org/pub/firefox/releases/57.0.2/linux-x86_64/en-US/firefox-57.0.2.tar.bz2' && \
+ tar xjf firefox-57.0.2.tar.bz2
+
+6. Download `geckodriver
+ `_ version
+ **v0.19.1**. If using 64-bit GNU/Linux distribution, this should be
+ as easy as:
+
+ .. warning::
+ In order to ensure the functional tests run well, it is
+ important to use correct combination of geckodriver and Mozilla
+ Firefox.
+
+ ::
+
+ workon conntrackt && \
+ cd test_binaries/ && \
+ wget 'https://github.com/mozilla/geckodriver/releases/download/v0.19.1/geckodriver-v0.19.1-linux64.tar.gz' && \
+ tar xzf geckodriver-v0.19.1-linux64.tar.gz
+
Development/test Django project
-------------------------------
diff --git a/requirements/development.in b/requirements/development.in
--- a/requirements/development.in
+++ b/requirements/development.in
@@ -32,4 +32,7 @@ mock~=1.3.0
sphinx~=1.6.0
# Used for handling of timezones.
-pytz
\ No newline at end of file
+pytz
+
+# Used for running functional tests.
+selenium~=3.8.0
\ No newline at end of file
diff --git a/requirements/development.txt b/requirements/development.txt
--- a/requirements/development.txt
+++ b/requirements/development.txt
@@ -22,11 +22,12 @@ markupsafe==1.0 # via jinja2
mock==1.3.0
palette==0.2
pbr==3.1.1 # via mock
-pydot==1.2.3
+pydot==1.2.4
pygments==2.2.0 # via sphinx
pyparsing==2.2.0 # via pydot
pytz==2017.3
requests==2.18.4 # via sphinx
+selenium==3.8.0
six==1.11.0 # via mock, sphinx
snowballstemmer==1.2.1 # via sphinx
sphinx==1.6.5
diff --git a/requirements/test.txt b/requirements/test.txt
--- a/requirements/test.txt
+++ b/requirements/test.txt
@@ -22,11 +22,12 @@ markupsafe==1.0 # via jinja2
mock==1.3.0
palette==0.2
pbr==3.1.1 # via mock
-pydot==1.2.3
+pydot==1.2.4
pygments==2.2.0 # via sphinx
pyparsing==2.2.0 # via pydot
pytz==2017.3
requests==2.18.4 # via sphinx
+selenium==3.8.0
six==1.11.0 # via mock, sphinx
snowballstemmer==1.2.1 # via sphinx
sphinx==1.6.5
diff --git a/test_binaries/.keep b/test_binaries/.keep
new file mode 100644