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 .user import User
  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 user(selenium: webdriver.Chrome) -> Generator[User, None, None]:
  35. user = User(selenium)
  36. yield user
  37. user.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