Quellcode durchsuchen

Add a selenium check

Steven Silvester vor 8 Jahren
Ursprung
Commit
98b6354f42
3 geänderte Dateien mit 95 neuen und 8 gelöschten Zeilen
  1. 5 0
      .travis.yml
  2. 87 0
      jupyterlab/selenium_check.py
  3. 3 8
      scripts/travis_script.sh

+ 5 - 0
.travis.yml

@@ -15,6 +15,11 @@ env:
   global:
   - GH_REF: github.com/jupyterlab/jupyterlab.git
   - secure: MWpTI6cj3/Bnmtrr0Oqlp2JeWqDneB9aEjlQDaRxLOkqVbxhqDcYW9qAgZZP+sq29vT5oVMWzyCirteKxJfG2vy3HQE1XNLhz82Sf/7sE6DQ51gohl0CcOeA/uA8hCXEw97hneFWsZgHKqSoch7nVDsE3qfYgO+930jHlnxYApJGP9hZFv2Q2NVa6+99kipEYS4BY/yBDYKy6/t4kXcnBrUlNaPtdjnXcrY9esLZ7EQtkaG5VqcQVIBaLJKGF5Q7Aufj5nCFaZ6hZDF1Bi/AbmIbVWFyiT+22i8DZK6YwenECckyzoWkl+bEhYepWsgBKh/BDgPBAmPWKHgU5V4apDaGqZBhF7FP6H02AdZYYuCwl47jyakqvWLZW7oDmorL+HsWG5HQ3m0tMT2ywdbwNOiD39tiPPXjsvROh5ys9vL6NzQvxILCeEOnzcZrFuxi2LGEZfnlqRIjkh1llUAvNc3mOycRLWDOwVQa2+U59qDRXCSY2RD+MOfcdFUGengVujTMaAPMBUa3E33/ZIOOKJtR5TIajYZvd9B2uDlz02QfvTK+hrTaNYJjRZ8WCaeSM/CIKdoLw+29MNO6eqtchw0/vNvM8c9EkhrhMQKcY04OecVhmZkemFhd4SD5l92VX3z3xSxLkmazfNkj3CigWDXNxfDd2ORoGjA46Pga8RM=
+before_install:
+  - wget https://github.com/mozilla/geckodriver/releases/download/v0.11.1/geckodriver-v0.11.1-linux64.tar.gz
+  - mkdir geckodriver
+  - tar -xzf geckodriver-v0.11.1-linux64.tar.gz -C geckodriver
+  - export PATH=$PATH:$PWD/geckodriver
 install:
 - bash ./scripts/travis_install.sh
 script:

+ 87 - 0
jupyterlab/selenium_check.py

@@ -0,0 +1,87 @@
+
+# -*- coding: utf-8 -*-
+from __future__ import print_function, absolute_import
+
+import os
+import sys
+import time
+import threading
+
+from tornado import ioloop
+from notebook.notebookapp import NotebookApp
+from traitlets import Bool, Unicode
+from jupyterlab_launcher import LabConfig, add_handlers
+
+from selenium import webdriver
+
+try:
+    import coloroma
+    coloroma.init()
+    COLOR = True
+except ImportError:
+    COLOR = os.name != 'nt'
+
+
+here = os.path.dirname(__file__)
+
+
+class TestApp(NotebookApp):
+
+    default_url = Unicode('/lab')
+    open_browser = Bool(False)
+
+    def start(self):
+        self.io_loop = ioloop.IOLoop.current()
+        config = LabConfig()
+        config.assets_dir = os.path.join(here, 'build')
+        config.settings_dir = ''
+
+        add_handlers(self.web_app, config)
+        self.io_loop.call_later(1, self._run_selenium)
+        super(TestApp, self).start()
+
+    def _run_selenium(self):
+        thread = threading.Thread(target=run_selenium,
+            args=(self.display_url, self._selenium_finished))
+        thread.start()
+
+    def _selenium_finished(self, result):
+        self.io_loop.add_callback(lambda: sys.exit(result))
+
+
+def run_selenium(url, callback):
+    """Run the selenium test and call the callback with the exit code.exit
+    """
+
+    print('Starting Firefox Driver')
+    driver = webdriver.Firefox()
+
+    print('Navigating to page:', url)
+    driver.get(url)
+
+    completed = False
+
+    # Start a poll loop.
+    t0 = time.time()
+    while time.time() - t0 < 10:
+        el = driver.find_element_by_id('main')
+        if el:
+            completed = True
+            break
+
+        # Avoid hogging the main thread.
+        time.sleep(0.5)
+
+    driver.quit()
+
+    # Return the exit code.
+    if not completed:
+        callback(1)
+    else:
+        if os.path.exists('./geckodriver.log'):
+            os.remove('./geckodriver.log')
+        callback(0)
+
+
+if __name__ == '__main__':
+    TestApp.launch_instance()

+ 3 - 8
scripts/travis_script.sh

@@ -11,14 +11,9 @@ export PATH="$HOME/miniconda/bin:$PATH"
 
 
 if [[ $GROUP == tests ]]; then
-    # Make sure we can start and kill the lab server
-    jupyter lab --no-browser &
-    TASK_PID=$!
-    # Make sure the task is running
-    ps -p $TASK_PID || exit 1
-    sleep 5
-    kill $TASK_PID
-    wait $TASK_PID
+    # Make sure we can successfully load the page
+    pip install selenium
+    python selenium_check.py
 
     # Run the JS and python tests
     py.test