1
0

conftest.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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=1200x600')
  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.instances = {}
  28. WebPage.sockets = {}
  29. WebPage.next_page_id = 0
  30. JustpyBaseComponent.next_id = 0
  31. JustpyBaseComponent.instances = {}
  32. jp.component_file_list = jp.create_component_file_list()
  33. jp.template_options['component_file_list'] = jp.component_file_list
  34. importlib.reload(globals)
  35. @pytest.fixture()
  36. def user(selenium: webdriver.Chrome) -> Generator[User, None, None]:
  37. user = User(selenium)
  38. yield user
  39. user.stop_server()
  40. @pytest.fixture
  41. def screenshot(selenium: webdriver.Chrome) -> Callable[[str], None]:
  42. # original taken from https://github.com/theserverlessway/pytest-chrome/blob/master/tests/conftest.py
  43. def shot(name: str = '') -> None:
  44. directory = 'screenshots'
  45. if not os.path.exists(directory):
  46. os.makedirs(directory)
  47. identifier = datetime.datetime.now().isoformat()
  48. if name:
  49. identifier = f'{identifier}-{name}'
  50. filename = f'{directory}/{identifier}.png'
  51. print(f'Storing Screenshot to {filename}')
  52. selenium.get_screenshot_as_file(filename)
  53. return shot