selenium_check.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. # -*- coding: utf-8 -*-
  2. from __future__ import print_function, absolute_import
  3. from concurrent.futures import ThreadPoolExecutor
  4. import json
  5. import os
  6. import sys
  7. import subprocess
  8. from tornado.ioloop import IOLoop
  9. from notebook.notebookapp import flags, aliases
  10. from traitlets import Bool, Unicode
  11. from selenium import webdriver
  12. from .labapp import LabApp
  13. here = os.path.dirname(__file__)
  14. test_flags = dict(flags)
  15. test_flags['core-mode'] = (
  16. {'SeleniumApp': {'core_mode': True}},
  17. "Start the app in core mode."
  18. )
  19. test_flags['dev-mode'] = (
  20. {'SeleniumApp': {'dev_mode': True}},
  21. "Start the app in dev mode."
  22. )
  23. test_aliases = dict(aliases)
  24. test_aliases['app-dir'] = 'SeleniumApp.app_dir'
  25. class SeleniumApp(LabApp):
  26. open_browser = Bool(False)
  27. base_url = '/foo/'
  28. ip = '127.0.0.1'
  29. flags = test_flags
  30. aliases = test_aliases
  31. def start(self):
  32. web_app = self.web_app
  33. web_app.settings.setdefault('page_config_data', dict())
  34. web_app.settings['page_config_data']['seleniumTest'] = True
  35. web_app.settings['page_config_data']['buildAvailable'] = False
  36. pool = ThreadPoolExecutor()
  37. future = pool.submit(run_selenium, self.display_url)
  38. IOLoop.current().add_future(future, self._selenium_finished)
  39. super(SeleniumApp, self).start()
  40. def _selenium_finished(self, future):
  41. try:
  42. sys.exit(future.result())
  43. except Exception as e:
  44. self.log.error(str(e))
  45. sys.exit(1)
  46. def run_selenium(url):
  47. """Run the selenium test and return an exit code.
  48. """
  49. return subprocess.run(["node", "chrome-test.js", url], cwd=here).returncode
  50. if __name__ == '__main__':
  51. SeleniumApp.launch_instance()