conftest.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import datetime
  2. import importlib
  3. import os
  4. from typing import Callable, Generator
  5. import icecream
  6. import justpy as jp
  7. import pytest
  8. from justpy.htmlcomponents import JustpyBaseComponent, WebPage
  9. from nicegui import globals
  10. from selenium import webdriver
  11. from .screen import Screen
  12. icecream.install()
  13. @pytest.fixture
  14. def chrome_options(chrome_options: webdriver.ChromeOptions) -> webdriver.ChromeOptions:
  15. chrome_options.add_argument('headless')
  16. chrome_options.add_argument('disable-gpu')
  17. chrome_options.add_argument('window-size=600x600')
  18. #chrome_options.add_experimental_option('w3c', False)
  19. return chrome_options
  20. @pytest.fixture
  21. def selenium(selenium: webdriver.Chrome) -> webdriver.Chrome:
  22. selenium.implicitly_wait(0.1)
  23. selenium.set_page_load_timeout(1)
  24. return selenium
  25. @pytest.fixture(autouse=True)
  26. def reset_globals() -> Generator[None, None, None]:
  27. WebPage.sockets.clear()
  28. WebPage.instances.clear()
  29. WebPage.next_page_id = 0
  30. JustpyBaseComponent.instances.clear()
  31. JustpyBaseComponent.next_id = 0
  32. importlib.reload(globals)
  33. @pytest.fixture()
  34. def screen(selenium: webdriver.Chrome) -> Generator[Screen, None, None]:
  35. screen = Screen(selenium)
  36. yield screen
  37. screen.stop_server()
  38. @pytest.fixture
  39. def screenshot(selenium: webdriver.Chrome) -> Callable[[str], None]:
  40. # original taken from https://github.com/theserverlessway/pytest-chrome/blob/master/tests/conftest.py
  41. def shot(name: str = '') -> None:
  42. directory = 'screenshots'
  43. if not os.path.exists(directory):
  44. os.makedirs(directory)
  45. identifier = datetime.datetime.now().isoformat()
  46. if name:
  47. identifier = f'{identifier}-{name}'
  48. filename = f'{directory}/{identifier}.png'
  49. print(f'Storing Screenshot to {filename}')
  50. selenium.get_screenshot_as_file(filename)
  51. return shot