conftest.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import datetime
  2. import importlib
  3. import os
  4. from typing import Callable, Generator
  5. import icecream
  6. import pytest
  7. if True: # NOTE: prevent formatter from sorting the imports (nicegui must come before justpy)
  8. from nicegui import ui, globals
  9. from justpy.htmlcomponents import JustpyBaseComponent, WebPage
  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 capabilities(capabilities):
  22. capabilities['goog:loggingPrefs'] = {'browser': 'ALL'}
  23. return capabilities
  24. @pytest.fixture
  25. def selenium(selenium: webdriver.Chrome) -> webdriver.Chrome:
  26. selenium.implicitly_wait(0.5)
  27. selenium.set_page_load_timeout(2)
  28. return selenium
  29. @pytest.fixture(autouse=True)
  30. def reset_globals() -> Generator[None, None, None]:
  31. WebPage.sockets.clear()
  32. WebPage.instances.clear()
  33. WebPage.next_page_id = 0
  34. JustpyBaseComponent.instances.clear()
  35. JustpyBaseComponent.next_id = 0
  36. importlib.reload(globals)
  37. @pytest.fixture()
  38. def screen(selenium: webdriver.Chrome) -> Generator[Screen, None, None]:
  39. screen = Screen(selenium)
  40. yield screen
  41. screen.stop_server()
  42. @pytest.fixture
  43. def screenshot(selenium: webdriver.Chrome) -> Callable[[str], None]:
  44. # original taken from https://github.com/theserverlessway/pytest-chrome/blob/master/tests/conftest.py
  45. def shot(name: str = '') -> None:
  46. directory = 'screenshots'
  47. if not os.path.exists(directory):
  48. os.makedirs(directory)
  49. identifier = datetime.datetime.now().isoformat()
  50. if name:
  51. identifier = f'{identifier}-{name}'
  52. filename = f'{directory}/{identifier}.png'
  53. print(f'Storing Screenshot to {filename}')
  54. selenium.get_screenshot_as_file(filename)
  55. return shot