diff --git a/app/static/sass/main.sass b/app/static/sass/main.sass index e8b0087..6c94c34 100644 --- a/app/static/sass/main.sass +++ b/app/static/sass/main.sass @@ -1,19 +1,23 @@ -body - padding-bottom: 40px - color: #5a5a5a -.navbar-wrapper - position: absolute - top: 0 - left: 0 - right: 0 - z-index: 20 - .container - padding-left: 0 - padding-right: 0 - .navbar - padding-left: 15px - padding-right: 15px +html, body + height: 100% + +body + color: #5a5a5a + padding-top: 70px + + >main + min-height: 100% + height: auto + margin: 0 auto -60px + padding: 0 0 60px + + >footer + height: 60px + background-color: #f5f5f5 + p + margin: 20px 0 + .carousel height: 500px diff --git a/serve.py b/serve.py index 37d77ca..cf69544 100644 --- a/serve.py +++ b/serve.py @@ -40,9 +40,9 @@ else: monkey_patch_http_server({'url': url}, callback=log) app.logger.debug('HTTPServer monkey patched for url %s' % url) - files = ['app/static/javascripts/*', - 'app/static/stylesheets/*', - 'app/templates/*'] + files = ['app/static/javascripts/', + 'app/static/stylesheets/', + 'app/templates/'] watch({'url': url}, files, unwatch_at_exit=True) app.run( diff --git a/test/conftest.py b/test/conftest.py index 76e5dab..e00339a 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -1,7 +1,11 @@ from selenium import webdriver from pytest import fixture -from multiprocessing import Process, Lock +from multiprocessing import Process, Lock, active_children +from cutter import attr_cut +from time import sleep +import atexit import re +import os import sys try: @@ -10,8 +14,10 @@ try: except ImportError: pass + display = None fs_path = {} +browsers = ['firefox', 'chrome'] def pytest_report_teststatus(report): @@ -31,6 +37,7 @@ def pytest_report_teststatus(report): def pytest_addoption(parser): parser.addoption("--display", action="store_true") + parser.addoption("--browser", action="append") def pytest_configure(config): @@ -38,6 +45,8 @@ def pytest_configure(config): from pyvirtualdisplay import Display display = Display(visible=0, size=(1440, 900)) display.start() + if config.getoption("--browser"): + browsers[:] = config.getoption("--browser") class App(Process): @@ -58,13 +67,12 @@ class App(Process): def new_serve_forever(self): print('Release lock') l.release() - # from signal import SIGUSR1 - # os.kill(ppid, SIGUSR1) old_serve_forever(self) HTTPServer.serve_forever = new_serve_forever - + os.environ['APP_TESTING'] = 'YES' from app import app + app.run( debug=True, threaded=True, @@ -91,7 +99,48 @@ def app(request): return app -@fixture(scope='session', params=('firefox', 'chrome')) +class ElementWrapper(object): + def __init__(self, element): + self.element = element + + def __getattr__(self, attr): + if attr in self.__dict__: + return getattr(self, attr) + return getattr(self.element, attr) + + def find(self, selector): + return attr_cut( + map(ElementWrapper, + self.element.find_elements_by_css_selector(selector))) + __call__ = find + + def type(self, keys): + self.clear() + self.send_keys(keys) + + +class BrowserWrapper(object): + + def __init__(self, browser): + self.browser = browser + + def __getattr__(self, attr): + if attr in self.__dict__: + return getattr(self, attr) + return getattr(self.browser, attr) + + def go(self, url): + if url.startswith('/'): + url = url[1:] + self.browser.get('http://localhost:29013/' + url) + + def __call__(self, selector): + return attr_cut( + map(ElementWrapper, + self.browser.find_elements_by_css_selector(selector))) + + +@fixture(scope='session', params=browsers) def s(request, app): # s = Selenium Browser browser = getattr(webdriver, request.param.capitalize())() @@ -100,9 +149,13 @@ def s(request, app): # s = Selenium Browser request.addfinalizer(close_browser) app.wait_for_lock() - return browser + return BrowserWrapper(browser) -def pytest_unconfigure(config): +@atexit.register +def killall(): if display: display.stop() + for child in active_children(): + os.kill(child.pid, SIGKILL) + diff --git a/test/selenium/test_index.py b/test/selenium/test_index.py index 1a1f43b..3ce6a79 100644 --- a/test/selenium/test_index.py +++ b/test/selenium/test_index.py @@ -1,11 +1,11 @@ def test_index(s): - s.get('http://localhost:29013/') + s.go('/') assert 'Apparatus' in s.title - assert s.find_element_by_css_selector('h1') + assert s('h1') def test_index_2(s): - s.get('http://localhost:29013/') + s.go('/') assert 'Apparatus' in s.title - assert s.find_element_by_css_selector('ol') + assert s('ol')