conftest.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import datetime
  2. import os
  3. from typing import Callable, Generator
  4. import icecream
  5. import pytest
  6. from selenium import webdriver
  7. from .user import User
  8. icecream.install()
  9. @pytest.fixture
  10. def chrome_options(chrome_options: webdriver.ChromeOptions) -> webdriver.ChromeOptions:
  11. chrome_options.add_argument('headless')
  12. chrome_options.add_argument('disable-gpu')
  13. chrome_options.add_argument('window-size=1200x600')
  14. chrome_options.add_experimental_option('w3c', False)
  15. return chrome_options
  16. @pytest.fixture
  17. def selenium(selenium: webdriver.Chrome) -> webdriver.Chrome:
  18. selenium.implicitly_wait(0.1)
  19. selenium.set_page_load_timeout(1)
  20. return selenium
  21. @pytest.fixture()
  22. def user(selenium: webdriver.Chrome) -> Generator[User, None, None]:
  23. user = User(selenium)
  24. yield user
  25. user.stop_server()
  26. @pytest.fixture
  27. def screenshot(selenium: webdriver.Chrome) -> Callable[[str], None]:
  28. # original taken from https://github.com/theserverlessway/pytest-chrome/blob/master/tests/conftest.py
  29. def shot(name: str = '') -> None:
  30. directory = 'screenshots'
  31. if not os.path.exists(directory):
  32. os.makedirs(directory)
  33. identifier = datetime.datetime.now().isoformat()
  34. if name:
  35. identifier = f'{identifier}-{name}'
  36. filename = f'{directory}/{identifier}.png'
  37. print(f'Storing Screenshot to {filename}')
  38. selenium.get_screenshot_as_file(filename)
  39. return shot