conftest.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import importlib
  2. import os
  3. from typing import Dict, Generator
  4. import icecream
  5. import pytest
  6. if True: # NOTE: prevent formatter from sorting the imports (NiceGUI must come before JustPy)
  7. from nicegui import globals
  8. from justpy.htmlcomponents import JustpyBaseComponent, WebPage
  9. from selenium import webdriver
  10. from .screen import Screen
  11. icecream.install()
  12. @pytest.fixture
  13. def chrome_options(chrome_options: webdriver.ChromeOptions) -> webdriver.ChromeOptions:
  14. chrome_options.add_argument('headless')
  15. chrome_options.add_argument('disable-gpu')
  16. chrome_options.add_argument('window-size=600x600')
  17. return chrome_options
  18. @pytest.fixture
  19. def capabilities(capabilities: Dict) -> Dict:
  20. capabilities['goog:loggingPrefs'] = {'browser': 'ALL'}
  21. return capabilities
  22. @pytest.fixture
  23. def selenium(selenium: webdriver.Chrome) -> webdriver.Chrome:
  24. selenium.implicitly_wait(0.5)
  25. selenium.set_page_load_timeout(2)
  26. return selenium
  27. @pytest.fixture(autouse=True)
  28. def reset_globals() -> Generator[None, None, None]:
  29. WebPage.sockets.clear()
  30. WebPage.instances.clear()
  31. WebPage.next_page_id = 0
  32. JustpyBaseComponent.instances.clear()
  33. JustpyBaseComponent.next_id = 0
  34. importlib.reload(globals)
  35. @pytest.fixture(scope='session', autouse=True)
  36. def remove_all_screenshots() -> None:
  37. if os.path.exists(Screen.SCREENSHOT_DIR):
  38. for name in os.listdir(Screen.SCREENSHOT_DIR):
  39. os.remove(os.path.join(Screen.SCREENSHOT_DIR, name))
  40. @pytest.fixture
  41. def screen(selenium: webdriver.Chrome, request: pytest.FixtureRequest, caplog: pytest.LogCaptureFixture) \
  42. -> Generator[Screen, None, None]:
  43. screen = Screen(selenium, caplog)
  44. yield screen
  45. if screen.is_open:
  46. screen.shot(request.node.name)
  47. logs = screen.caplog.get_records('call')
  48. assert not logs, f'There were unexpected logs:\n-------\n{logs}\n-------'
  49. screen.stop_server()