|
1 | 1 | import os |
2 | 2 | import json |
| 3 | +import shutil |
| 4 | +import tempfile |
| 5 | + |
3 | 6 | import pytest |
4 | 7 | import typing |
5 | 8 | import platform |
|
14 | 17 | INDEX_PAGE = "https://lf2a.github.io/webpage-test/" |
15 | 18 |
|
16 | 19 |
|
17 | | -def setup_chrome(headless: bool) -> WebBot: |
| 20 | +def get_fake_bin_path(web: WebBot) -> str: |
| 21 | + return os.path.join(web.download_folder_path, 'fake.bin') |
| 22 | + |
| 23 | + |
| 24 | +def get_driver_path(driver: str) -> str: |
| 25 | + if OS_NAME.lower() == 'windows': |
| 26 | + return os.path.join(PROJECT_DIR, 'web-drivers', 'windows', f'{driver}.exe') |
| 27 | + |
| 28 | + if OS_NAME.lower() == 'linux': |
| 29 | + return os.path.join(PROJECT_DIR, 'web-drivers', 'linux', driver) |
| 30 | + |
| 31 | + if OS_NAME.lower() == 'darwin': |
| 32 | + return os.path.join(PROJECT_DIR, 'web-drivers', 'macos', driver) |
| 33 | + |
| 34 | + raise ValueError(f'OS [{OS_NAME}] not supported.') |
| 35 | + |
| 36 | + |
| 37 | +def setup_chrome(headless: bool, tmp_folder: str) -> WebBot: |
18 | 38 | web = WebBot(headless) |
19 | 39 | web.browser = Browser.CHROME |
20 | 40 |
|
21 | | - if OS_NAME == 'Windows': |
22 | | - web.driver_path = os.path.join(PROJECT_DIR, 'web-drivers', 'windows', 'chromedriver.exe') |
23 | | - elif OS_NAME == 'Linux': |
24 | | - web.driver_path = os.path.join(PROJECT_DIR, 'web-drivers', 'linux', 'chromedriver') |
25 | | - elif OS_NAME == 'Darwin': |
26 | | - web.driver_path = os.path.join(PROJECT_DIR, 'web-drivers', 'macos', 'chromedriver') |
27 | | - else: |
28 | | - raise ValueError(f'OS [{OS_NAME}] not supported.') |
| 41 | + web.driver_path = get_driver_path(driver='chromedriver') |
| 42 | + web.download_folder_path = tmp_folder |
29 | 43 | return web |
30 | 44 |
|
31 | 45 |
|
32 | | -def setup_firefox(headless: bool) -> WebBot: |
| 46 | +def setup_firefox(headless: bool, tmp_folder: str) -> WebBot: |
33 | 47 | web = WebBot(headless) |
34 | 48 | web.browser = Browser.FIREFOX |
35 | 49 |
|
36 | | - if OS_NAME == 'Windows': |
37 | | - web.driver_path = os.path.join(PROJECT_DIR, 'web-drivers', 'windows', 'geckodriver.exe') |
38 | | - elif OS_NAME == 'Linux': |
39 | | - web.driver_path = os.path.join(PROJECT_DIR, 'web-drivers', 'linux', 'geckodriver') |
40 | | - elif OS_NAME == 'Darwin': |
41 | | - web.driver_path = os.path.join(PROJECT_DIR, 'web-drivers', 'macos', 'geckodriver') |
42 | | - else: |
43 | | - raise ValueError(f'OS [{OS_NAME}] not supported.') |
| 50 | + web.driver_path = get_driver_path(driver='geckodriver') |
| 51 | + web.download_folder_path = tmp_folder |
| 52 | + |
44 | 53 | return web |
45 | 54 |
|
46 | 55 |
|
47 | | -def setup_edge(headless: bool) -> WebBot: |
| 56 | +def setup_edge(headless: bool, tmp_folder: str) -> WebBot: |
48 | 57 | web = WebBot(headless) |
49 | 58 | web.browser = Browser.EDGE |
50 | 59 |
|
51 | | - opt = browsers.edge.default_options(headless=headless, download_folder_path=web.download_folder_path) |
| 60 | + web.driver_path = get_driver_path(driver='msedgedriver') |
| 61 | + web.download_folder_path = tmp_folder |
| 62 | + opt = browsers.edge.default_options(headless=headless, download_folder_path=tmp_folder) |
52 | 63 | opt.set_capability('platform', 'ANY') # WINDOWS is default value: |
53 | 64 |
|
54 | | - if OS_NAME == 'Windows': |
55 | | - web.driver_path = os.path.join(PROJECT_DIR, 'web-drivers', 'windows', 'msedgedriver.exe') |
56 | | - elif OS_NAME == 'Linux': |
57 | | - web.driver_path = os.path.join(PROJECT_DIR, 'web-drivers', 'linux', 'msedgedriver') |
58 | | - elif OS_NAME == 'Darwin': |
59 | | - web.driver_path = os.path.join(PROJECT_DIR, 'web-drivers', 'macos', 'msedgedriver') |
60 | | - else: |
61 | | - raise ValueError(f'OS [{OS_NAME}] not supported.') |
62 | 65 | web.options = opt |
63 | 66 | return web |
64 | 67 |
|
65 | 68 |
|
| 69 | +def factory_setup_browser(browser: str, is_headless: bool, tmp_folder: str) -> WebBot: |
| 70 | + dict_browsers = { |
| 71 | + 'chrome': setup_chrome, |
| 72 | + 'firefox': setup_firefox, |
| 73 | + 'edge': setup_edge |
| 74 | + } |
| 75 | + |
| 76 | + setup_browser = dict_browsers.get(browser, None) |
| 77 | + |
| 78 | + if setup_browser is None: |
| 79 | + raise ValueError(f'Browser [{browser}] not supported.') |
| 80 | + |
| 81 | + return setup_browser(headless=is_headless, tmp_folder=tmp_folder) |
| 82 | + |
| 83 | + |
66 | 84 | @pytest.fixture |
67 | | -def web(request): |
| 85 | +def tmp_folder() -> str: |
| 86 | + folder = tempfile.mkdtemp() |
| 87 | + yield folder |
| 88 | + shutil.rmtree(folder) |
| 89 | + |
| 90 | + |
| 91 | +@pytest.fixture |
| 92 | +def web(request, tmp_folder: str): |
68 | 93 |
|
69 | 94 | browser = request.config.getoption("--browser") or Browser.CHROME |
70 | 95 | is_headless = request.config.getoption("--headless") |
71 | 96 |
|
72 | | - if browser == 'chrome': |
73 | | - web = setup_chrome(is_headless) |
74 | | - elif browser == 'firefox': |
75 | | - web = setup_firefox(is_headless) |
76 | | - elif browser == 'edge': |
77 | | - web = setup_edge(is_headless) |
78 | | - else: |
79 | | - raise ValueError(f'Browser [{browser}] not supported.') |
| 97 | + web = factory_setup_browser(browser=browser, is_headless=is_headless, tmp_folder=tmp_folder) |
80 | 98 | yield web |
81 | 99 | web.stop_browser() |
82 | 100 |
|
|
0 commit comments