From ca12314c8b8332f4d98ff2b0f39ed83a5cc13e4c Mon Sep 17 00:00:00 2001 From: mwwsp Date: Tue, 25 Sep 2018 14:27:36 +0100 Subject: [PATCH 1/7] execute script asyncronously in order to effectively use promises --- README.rst | 6 ++++- axe_selenium_python/axe.py | 4 +-- axe_selenium_python/tests/test_axe.py | 35 ++++++++++++++++++++++----- 3 files changed, 36 insertions(+), 9 deletions(-) mode change 100644 => 100755 README.rst mode change 100644 => 100755 axe_selenium_python/axe.py mode change 100644 => 100755 axe_selenium_python/tests/test_axe.py diff --git a/README.rst b/README.rst old mode 100644 new mode 100755 index 0d1fed4..ebc1cea --- a/README.rst +++ b/README.rst @@ -73,7 +73,11 @@ Contributing ------------ Fork the repository and submit PRs with bug fixes and enhancements; -contributions are very welcome. You can run the tests using +contributions are very welcome. + +Node dependencies must be installed by running `npm install` inside the axe-selenium-python directory. + +You can run the tests using `tox `_: .. code-block:: bash diff --git a/axe_selenium_python/axe.py b/axe_selenium_python/axe.py old mode 100644 new mode 100755 index f1b6802..bcecbb7 --- a/axe_selenium_python/axe.py +++ b/axe_selenium_python/axe.py @@ -33,7 +33,7 @@ def execute(self, context=None, options=None): :param context: which page part(s) to analyze and/or what to exclude. :param options: dictionary of aXe options. """ - template = "return axe.run(%s).then(function(result){return result;});" + template = "var callback = arguments[arguments.length - 1]; axe.run(%s).then(results => callback(results))" args = "" # If context parameter is passed, add to args @@ -47,7 +47,7 @@ def execute(self, context=None, options=None): args += "%s" % options command = template % args - response = self.selenium.execute_script(command) + response = self.selenium.execute_async_script(command) return response def report(self, violations): diff --git a/axe_selenium_python/tests/test_axe.py b/axe_selenium_python/tests/test_axe.py old mode 100644 new mode 100755 index 775c3ed..66c12b5 --- a/axe_selenium_python/tests/test_axe.py +++ b/axe_selenium_python/tests/test_axe.py @@ -13,21 +13,44 @@ @pytest.fixture -def driver(): +def firefox_driver(): driver = webdriver.Firefox() yield driver driver.close() + +@pytest.fixture +def chrome_driver(): + driver = webdriver.Chrome() + yield driver + driver.close() + @pytest.mark.nondestructive -def test_run_axe_sample_page(driver): +def test_run_axe_sample_page_firefox(firefox_driver): """Run axe against sample page and verify JSON output is as expected.""" - driver.get("file://" + _DEFAULT_TEST_FILE) - axe = Axe(driver) - axe.inject() - data = axe.execute() + data = _perform_axe_run(firefox_driver) assert len(data["inapplicable"]) == 50 assert len(data["incomplete"]) == 0 assert len(data["passes"]) == 7 assert len(data["violations"]) == 8 + + +@pytest.mark.nondestructive +def test_run_axe_sample_page_chrome(chrome_driver): + """Run axe against sample page and verify JSON output is as expected.""" + data = _perform_axe_run(chrome_driver) + + assert len(data["inapplicable"]) == 50 + assert len(data["incomplete"]) == 0 + assert len(data["passes"]) == 7 + assert len(data["violations"]) == 8 + + +def _perform_axe_run(driver): + driver.get("file://" + _DEFAULT_TEST_FILE) + axe = Axe(driver) + axe.inject() + data = axe.execute() + return data From a5886d16d745c7ad32b36c722a50d5de891dcdcf Mon Sep 17 00:00:00 2001 From: mwwsp Date: Tue, 25 Sep 2018 14:44:50 +0100 Subject: [PATCH 2/7] added travis configuration --- .travis.yml | 2 ++ axe_selenium_python/tests/test_axe.py | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) mode change 100644 => 100755 .travis.yml diff --git a/.travis.yml b/.travis.yml old mode 100644 new mode 100755 index c675756..aba5280 --- a/.travis.yml +++ b/.travis.yml @@ -18,6 +18,7 @@ jobs: node_js: stable addons: firefox: latest-nightly + chrome: stable env: TOXENV=py36 MOZ_HEADLESS=1 GECKODRIVER=0.22.0 before_install: - wget -O /tmp/geckodriver.tar.gz https://github.com/mozilla/geckodriver/releases/download/v$GECKODRIVER/geckodriver-v$GECKODRIVER-linux64.tar.gz @@ -36,6 +37,7 @@ jobs: node_js: stable addons: firefox: latest-nightly + chrome: stable env: TOXENV=py27 MOZ_HEADLESS=1 GECKODRIVER=0.22.0 before_install: - wget -O /tmp/geckodriver.tar.gz https://github.com/mozilla/geckodriver/releases/download/v$GECKODRIVER/geckodriver-v$GECKODRIVER-linux64.tar.gz diff --git a/axe_selenium_python/tests/test_axe.py b/axe_selenium_python/tests/test_axe.py index 66c12b5..28778c3 100755 --- a/axe_selenium_python/tests/test_axe.py +++ b/axe_selenium_python/tests/test_axe.py @@ -21,7 +21,10 @@ def firefox_driver(): @pytest.fixture def chrome_driver(): - driver = webdriver.Chrome() + opts = webdriver.ChromeOptions() + opts.headless = True + opts.add_argument('--no-sandbox') + driver = webdriver.Chrome(options=opts) yield driver driver.close() From b57b793edc8638721c1c1c8e26b355dee0dd4c39 Mon Sep 17 00:00:00 2001 From: mwwsp Date: Tue, 25 Sep 2018 15:10:00 +0100 Subject: [PATCH 3/7] added chromedriver to path on travis --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index aba5280..025f604 100755 --- a/.travis.yml +++ b/.travis.yml @@ -21,6 +21,7 @@ jobs: chrome: stable env: TOXENV=py36 MOZ_HEADLESS=1 GECKODRIVER=0.22.0 before_install: + - export PATH=/tmp/google-chrome-stable:$PATH - wget -O /tmp/geckodriver.tar.gz https://github.com/mozilla/geckodriver/releases/download/v$GECKODRIVER/geckodriver-v$GECKODRIVER-linux64.tar.gz - mkdir $HOME/geckodriver && tar xvf /tmp/geckodriver.tar.gz -C $HOME/geckodriver - export PATH=$HOME/geckodriver:$PATH @@ -40,6 +41,7 @@ jobs: chrome: stable env: TOXENV=py27 MOZ_HEADLESS=1 GECKODRIVER=0.22.0 before_install: + - export PATH=/tmp/google-chrome-stable:$PATH - wget -O /tmp/geckodriver.tar.gz https://github.com/mozilla/geckodriver/releases/download/v$GECKODRIVER/geckodriver-v$GECKODRIVER-linux64.tar.gz - mkdir $HOME/geckodriver && tar xvf /tmp/geckodriver.tar.gz -C $HOME/geckodriver - export PATH=$HOME/geckodriver:$PATH From 0298027c4435472fbddd7019b4e1837b9e253271 Mon Sep 17 00:00:00 2001 From: mwwsp Date: Tue, 25 Sep 2018 15:16:22 +0100 Subject: [PATCH 4/7] cleaned up for flake8 --- axe_selenium_python/axe.py | 3 ++- axe_selenium_python/tests/test_axe.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/axe_selenium_python/axe.py b/axe_selenium_python/axe.py index bcecbb7..6e3bed8 100755 --- a/axe_selenium_python/axe.py +++ b/axe_selenium_python/axe.py @@ -33,7 +33,8 @@ def execute(self, context=None, options=None): :param context: which page part(s) to analyze and/or what to exclude. :param options: dictionary of aXe options. """ - template = "var callback = arguments[arguments.length - 1]; axe.run(%s).then(results => callback(results))" + template = "var callback = arguments[arguments.length - 1];" \ + "axe.run(%s).then(results => callback(results))" args = "" # If context parameter is passed, add to args diff --git a/axe_selenium_python/tests/test_axe.py b/axe_selenium_python/tests/test_axe.py index 28778c3..b96c136 100755 --- a/axe_selenium_python/tests/test_axe.py +++ b/axe_selenium_python/tests/test_axe.py @@ -18,7 +18,7 @@ def firefox_driver(): yield driver driver.close() - + @pytest.fixture def chrome_driver(): opts = webdriver.ChromeOptions() From 9c381b844459ec7ab61bf3047f3a254282cc88f0 Mon Sep 17 00:00:00 2001 From: mwwsp Date: Tue, 25 Sep 2018 15:24:47 +0100 Subject: [PATCH 5/7] changed chromedriver to point to executable --- .travis.yml | 4 ++-- axe_selenium_python/tests/test_axe.py | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 025f604..c110414 100755 --- a/.travis.yml +++ b/.travis.yml @@ -21,7 +21,7 @@ jobs: chrome: stable env: TOXENV=py36 MOZ_HEADLESS=1 GECKODRIVER=0.22.0 before_install: - - export PATH=/tmp/google-chrome-stable:$PATH + - export CHROMEDRIVER_PATH=/tmp/google-chrome-stable/chromedriver - wget -O /tmp/geckodriver.tar.gz https://github.com/mozilla/geckodriver/releases/download/v$GECKODRIVER/geckodriver-v$GECKODRIVER-linux64.tar.gz - mkdir $HOME/geckodriver && tar xvf /tmp/geckodriver.tar.gz -C $HOME/geckodriver - export PATH=$HOME/geckodriver:$PATH @@ -41,7 +41,7 @@ jobs: chrome: stable env: TOXENV=py27 MOZ_HEADLESS=1 GECKODRIVER=0.22.0 before_install: - - export PATH=/tmp/google-chrome-stable:$PATH + - export CHROMEDRIVER_PATH=/tmp/google-chrome-stable/chromedriver - wget -O /tmp/geckodriver.tar.gz https://github.com/mozilla/geckodriver/releases/download/v$GECKODRIVER/geckodriver-v$GECKODRIVER-linux64.tar.gz - mkdir $HOME/geckodriver && tar xvf /tmp/geckodriver.tar.gz -C $HOME/geckodriver - export PATH=$HOME/geckodriver:$PATH diff --git a/axe_selenium_python/tests/test_axe.py b/axe_selenium_python/tests/test_axe.py index b96c136..0c99c3a 100755 --- a/axe_selenium_python/tests/test_axe.py +++ b/axe_selenium_python/tests/test_axe.py @@ -2,7 +2,7 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. -from os import path +from os import path, getenv import pytest from selenium import webdriver @@ -24,7 +24,9 @@ def chrome_driver(): opts = webdriver.ChromeOptions() opts.headless = True opts.add_argument('--no-sandbox') - driver = webdriver.Chrome(options=opts) + driver_path = getenv('CHROMEDRIVER_PATH') + driver = webdriver.Chrome(options=opts, executable_path=driver_path) \ + if driver_path else webdriver.Chrome(options=opts) yield driver driver.close() From b08290ab994d95733ac8284e426167b94786836c Mon Sep 17 00:00:00 2001 From: mwwsp Date: Wed, 26 Sep 2018 09:04:20 +0100 Subject: [PATCH 6/7] downloading chromedriver on travis --- .travis.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index c110414..a9f136c 100755 --- a/.travis.yml +++ b/.travis.yml @@ -21,7 +21,11 @@ jobs: chrome: stable env: TOXENV=py36 MOZ_HEADLESS=1 GECKODRIVER=0.22.0 before_install: - - export CHROMEDRIVER_PATH=/tmp/google-chrome-stable/chromedriver + - CHROMEDRIVER_LATEST=`wget https://chromedriver.storage.googleapis.com/LATEST_RELEASE` + - wget http://chromedriver.storage.googleapis.com/$CHROMEDRIVER_LATEST/chromedriver_linux64.zip + - mkdir $HOME/chromedriver && unzip chromedriver_linux64.zip -d $HOME/chromedriver + - export PATH=$HOME/chromedriver:$PATH + - wget -O /tmp/chromedriver.tar.gz - wget -O /tmp/geckodriver.tar.gz https://github.com/mozilla/geckodriver/releases/download/v$GECKODRIVER/geckodriver-v$GECKODRIVER-linux64.tar.gz - mkdir $HOME/geckodriver && tar xvf /tmp/geckodriver.tar.gz -C $HOME/geckodriver - export PATH=$HOME/geckodriver:$PATH From ff73b0a461a020aab0fdd2783b1c79e510ba2d4f Mon Sep 17 00:00:00 2001 From: mwwsp Date: Wed, 26 Sep 2018 09:10:20 +0100 Subject: [PATCH 7/7] changed chromedriver version to env var --- .travis.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index a9f136c..60c3372 100755 --- a/.travis.yml +++ b/.travis.yml @@ -19,13 +19,11 @@ jobs: addons: firefox: latest-nightly chrome: stable - env: TOXENV=py36 MOZ_HEADLESS=1 GECKODRIVER=0.22.0 + env: TOXENV=py36 MOZ_HEADLESS=1 GECKODRIVER=0.22.0 CHROMEDRIVER=2.40 before_install: - - CHROMEDRIVER_LATEST=`wget https://chromedriver.storage.googleapis.com/LATEST_RELEASE` - - wget http://chromedriver.storage.googleapis.com/$CHROMEDRIVER_LATEST/chromedriver_linux64.zip - - mkdir $HOME/chromedriver && unzip chromedriver_linux64.zip -d $HOME/chromedriver + - wget -O /tmp/chromedriver.zip http://chromedriver.storage.googleapis.com/$CHROMEDRIVER/chromedriver_linux64.zip + - mkdir $HOME/chromedriver && unzip /tmp/chromedriver.zip -d $HOME/chromedriver - export PATH=$HOME/chromedriver:$PATH - - wget -O /tmp/chromedriver.tar.gz - wget -O /tmp/geckodriver.tar.gz https://github.com/mozilla/geckodriver/releases/download/v$GECKODRIVER/geckodriver-v$GECKODRIVER-linux64.tar.gz - mkdir $HOME/geckodriver && tar xvf /tmp/geckodriver.tar.gz -C $HOME/geckodriver - export PATH=$HOME/geckodriver:$PATH @@ -43,9 +41,11 @@ jobs: addons: firefox: latest-nightly chrome: stable - env: TOXENV=py27 MOZ_HEADLESS=1 GECKODRIVER=0.22.0 + env: TOXENV=py27 MOZ_HEADLESS=1 GECKODRIVER=0.22.0 CHROMEDRIVER=2.40 before_install: - - export CHROMEDRIVER_PATH=/tmp/google-chrome-stable/chromedriver + - wget -O /tmp/chromedriver.zip http://chromedriver.storage.googleapis.com/$CHROMEDRIVER/chromedriver_linux64.zip + - mkdir $HOME/chromedriver && unzip /tmp/chromedriver.zip -d $HOME/chromedriver + - export PATH=$HOME/chromedriver:$PATH - wget -O /tmp/geckodriver.tar.gz https://github.com/mozilla/geckodriver/releases/download/v$GECKODRIVER/geckodriver-v$GECKODRIVER-linux64.tar.gz - mkdir $HOME/geckodriver && tar xvf /tmp/geckodriver.tar.gz -C $HOME/geckodriver - export PATH=$HOME/geckodriver:$PATH