conftest.py 2.1 KB

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