Skip to content

Commit 672a5bb

Browse files
committed
ENH: Update conftest to tmp folders and ajust time tests
1 parent 4e48695 commit 672a5bb

File tree

3 files changed

+69
-75
lines changed

3 files changed

+69
-75
lines changed

conftest.py

Lines changed: 55 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import os
22
import json
3+
import shutil
4+
import tempfile
5+
36
import pytest
47
import typing
58
import platform
@@ -14,69 +17,84 @@
1417
INDEX_PAGE = "https://lf2a.github.io/webpage-test/"
1518

1619

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:
1838
web = WebBot(headless)
1939
web.browser = Browser.CHROME
2040

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
2943
return web
3044

3145

32-
def setup_firefox(headless: bool) -> WebBot:
46+
def setup_firefox(headless: bool, tmp_folder: str) -> WebBot:
3347
web = WebBot(headless)
3448
web.browser = Browser.FIREFOX
3549

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+
4453
return web
4554

4655

47-
def setup_edge(headless: bool) -> WebBot:
56+
def setup_edge(headless: bool, tmp_folder: str) -> WebBot:
4857
web = WebBot(headless)
4958
web.browser = Browser.EDGE
5059

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)
5263
opt.set_capability('platform', 'ANY') # WINDOWS is default value:
5364

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.')
6265
web.options = opt
6366
return web
6467

6568

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+
6684
@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):
6893

6994
browser = request.config.getoption("--browser") or Browser.CHROME
7095
is_headless = request.config.getoption("--headless")
7196

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)
8098
yield web
8199
web.stop_browser()
82100

test-requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
pytest
2+
pytest-xdist

tests/test_browser.py

Lines changed: 13 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88

99
def test_create_tab(web: WebBot):
1010
web.browse(conftest.INDEX_PAGE)
11-
web.wait(2_000)
1211

1312
title = web.page_title()
1413
assert title == 'Botcity - web test'
@@ -17,7 +16,6 @@ def test_create_tab(web: WebBot):
1716
def test_close_page(web: WebBot):
1817
web.browse(conftest.INDEX_PAGE)
1918
web.create_window(url=conftest.TEST_PAGE)
20-
web.wait(5_000)
2119
web.close_page()
2220

2321
title = web.page_title()
@@ -27,7 +25,6 @@ def test_close_page(web: WebBot):
2725
def test_create_window(web: WebBot):
2826
web.browse(conftest.INDEX_PAGE)
2927
web.create_window(url=conftest.TEST_PAGE)
30-
web.wait(2_000)
3128

3229
title = web.page_title()
3330
assert title == 'Page test'
@@ -36,7 +33,6 @@ def test_create_window(web: WebBot):
3633
def test_display_size(web: WebBot):
3734
web.browse(conftest.INDEX_PAGE)
3835
web.set_screen_resolution(1280, 720)
39-
web.wait(2_000)
4036
(w, h) = web.display_size()
4137

4238
assert w == 1280
@@ -63,7 +59,6 @@ def test_get_tabs(web: WebBot):
6359
def test_navigate_to(web: WebBot):
6460
web.browse(conftest.INDEX_PAGE)
6561
web.navigate_to(url=conftest.TEST_PAGE)
66-
web.wait(2_000)
6762

6863
title = web.page_title()
6964
assert title == 'Page test'
@@ -173,7 +168,6 @@ def test_set_file_input_element(web: WebBot):
173168

174169
pdf_file = os.path.join(conftest.PROJECT_DIR, 'sample.pdf')
175170
web.set_file_input_element(input_file_element, pdf_file)
176-
web.wait(5_000)
177171

178172
file_name = input_file_element.get_attribute('value')
179173
assert file_name == 'C:\\fakepath\\sample.pdf'
@@ -221,63 +215,44 @@ def test_scroll_up(web: WebBot):
221215
web.type_keys([web.KEYS.SHIFT, 'd']) # scroll down trigger
222216
web.scroll_up(20)
223217

224-
mouse_icon = web.find("mouse", matching=0.97, waiting_time=10_000)
218+
mouse_icon = web.find("mouse", matching=0.97, waiting_time=10000)
225219
assert mouse_icon is not None
226220

227221

228222
@pytest.mark.xfail
229223
def test_set_screen_resolution(web: WebBot):
230224
web.browse(conftest.INDEX_PAGE)
231225
web.set_screen_resolution(500, 500)
232-
web.wait(2000)
233226

234227
page_size = web.find_element('page-size', By.ID).text
235228
width = page_size.split('x')[0]
236229
assert width == '500'
237230

238231

239-
def test_wait_for_downloads_and_file(web: WebBot):
240-
if os.path.exists(conftest.FAKE_BIN_PATH):
241-
os.remove(conftest.FAKE_BIN_PATH)
232+
def test_wait_for_downloads(web: WebBot):
233+
fake_bin_path = conftest.get_fake_bin_path(web=web)
242234

243-
try:
244-
web.browse(conftest.INDEX_PAGE)
245-
web.wait(1000)
246-
247-
web.type_keys([web.KEYS.SHIFT, 'q'])
248-
web.wait(5000)
249-
250-
web.wait_for_downloads(timeout=120_000)
251-
web.wait(2000)
235+
web.browse(conftest.INDEX_PAGE)
252236

253-
assert os.path.exists(conftest.FAKE_BIN_PATH) and os.path.getsize(conftest.FAKE_BIN_PATH) > 0
254-
finally:
255-
os.remove(conftest.FAKE_BIN_PATH)
256-
wait_for_file(web=web)
237+
web.type_keys([web.KEYS.SHIFT, 'q'])
257238

239+
web.wait_for_downloads(timeout=20000)
240+
assert os.path.exists(fake_bin_path) and os.path.getsize(fake_bin_path) > 0
258241

259-
def wait_for_file(web: WebBot):
260-
try:
261-
if os.path.exists(conftest.FAKE_BIN_PATH):
262-
os.remove(conftest.FAKE_BIN_PATH)
263242

264-
web.browse(conftest.INDEX_PAGE)
265-
web.wait(1000)
243+
def test_wait_for_file(web: WebBot):
244+
fake_bin_path = conftest.get_fake_bin_path(web=web)
266245

267-
web.type_keys([web.KEYS.SHIFT, 'q'])
268-
web.wait(5000)
246+
web.browse(conftest.INDEX_PAGE)
269247

270-
web.wait_for_file(conftest.FAKE_BIN_PATH, timeout=120_000)
271-
web.wait(2000)
248+
web.type_keys([web.KEYS.SHIFT, 'q'])
272249

273-
assert os.path.exists(conftest.FAKE_BIN_PATH) and os.path.getsize(conftest.FAKE_BIN_PATH) > 0
274-
finally:
275-
os.remove(conftest.FAKE_BIN_PATH)
250+
web.wait_for_file(fake_bin_path, timeout=20000)
251+
assert os.path.exists(fake_bin_path) and os.path.getsize(fake_bin_path) > 0
276252

277253

278254
def test_set_current_element(web: WebBot):
279255
web.browse(conftest.INDEX_PAGE)
280-
web.wait(1000)
281256

282257
web.add_image('mouse', os.path.join(conftest.PROJECT_DIR, 'resources', 'mouse.png'))
283258
web.add_image('git', os.path.join(conftest.PROJECT_DIR, 'resources', 'git.png'))

0 commit comments

Comments
 (0)