Skip to content

Commit d25a273

Browse files
committed
TST: Implement webdriver manager and update CI.yml
1 parent e8d18a2 commit d25a273

File tree

12 files changed

+64
-28
lines changed

12 files changed

+64
-28
lines changed

.github/workflows/ci.yml

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@ on:
44
push:
55
pull_request:
66

7+
8+
env:
9+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
10+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
11+
712
jobs:
813
build:
914
runs-on: ${{ matrix.os }}
@@ -16,6 +21,12 @@ jobs:
1621
python-version: [3.7]
1722
steps:
1823
- uses: actions/checkout@v2
24+
- name: Install libgl1
25+
run: |
26+
sudo dpkg --add-architecture i386
27+
sudo apt update
28+
sudo apt install libgl1-mesa-dev libgconf-2-4 libatk1.0-0 libatk-bridge2.0-0 libgdk-pixbuf2.0-0 libgtk-3-0 libgbm-dev libnss3-dev libxss-dev libasound2 -y
29+
1930
2031
- name: Set up Python ${{ matrix.python-version }}
2132
uses: actions/setup-python@v2
@@ -30,6 +41,15 @@ jobs:
3041
run: |
3142
pip install .
3243
33-
- name: Run Tests
44+
- uses: browser-actions/setup-chrome@latest
45+
with:
46+
chrome-version: stable
47+
48+
- name: Run Tests in Chrome
49+
run: |
50+
pytest -v -vrxs --headless --browser=chrome
51+
52+
- uses: browser-actions/setup-firefox@latest
53+
- name: Run Tests in Firefox
3454
run: |
35-
python run_tests.py
55+
pytest -v -vrxs --headless --browser=firefox

conftest.py

Lines changed: 40 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88
import platform
99

1010
from botcity.web import WebBot, Browser, By, browsers
11+
from webdriver_manager.chrome import ChromeDriverManager
12+
from webdriver_manager.firefox import GeckoDriverManager
13+
from webdriver_manager.microsoft import EdgeChromiumDriverManager
1114

1215
OS_NAME = platform.system()
1316

@@ -21,52 +24,39 @@ def get_fake_bin_path(web: WebBot) -> str:
2124
return os.path.join(web.download_folder_path, 'fake.bin')
2225

2326

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:
27+
def setup_chrome(headless: bool, tmp_folder: str, download_driver: str) -> WebBot:
3828
web = WebBot(headless)
3929
web.browser = Browser.CHROME
4030

41-
web.driver_path = get_driver_path(driver='chromedriver')
31+
web.driver_path = download_driver
4232
web.download_folder_path = tmp_folder
4333
return web
4434

4535

46-
def setup_firefox(headless: bool, tmp_folder: str) -> WebBot:
36+
def setup_firefox(headless: bool, tmp_folder: str, download_driver: str) -> WebBot:
4737
web = WebBot(headless)
4838
web.browser = Browser.FIREFOX
4939

50-
web.driver_path = get_driver_path(driver='geckodriver')
40+
web.driver_path = download_driver
5141
web.download_folder_path = tmp_folder
5242

5343
return web
5444

5545

56-
def setup_edge(headless: bool, tmp_folder: str) -> WebBot:
46+
def setup_edge(headless: bool, tmp_folder: str, download_driver: str) -> WebBot:
5747
web = WebBot(headless)
5848
web.browser = Browser.EDGE
5949

60-
web.driver_path = get_driver_path(driver='msedgedriver')
50+
web.driver_path = download_driver
6151
web.download_folder_path = tmp_folder
6252
opt = browsers.edge.default_options(headless=headless, download_folder_path=tmp_folder)
63-
opt.set_capability('platform', 'ANY') # WINDOWS is default value:
53+
opt.set_capability('platform', 'ANY')
6454

6555
web.options = opt
6656
return web
6757

6858

69-
def factory_setup_browser(browser: str, is_headless: bool, tmp_folder: str) -> WebBot:
59+
def factory_setup_browser(browser: str, is_headless: bool, tmp_folder: str, download_driver: str) -> WebBot:
7060
dict_browsers = {
7161
'chrome': setup_chrome,
7262
'firefox': setup_firefox,
@@ -78,7 +68,22 @@ def factory_setup_browser(browser: str, is_headless: bool, tmp_folder: str) -> W
7868
if setup_browser is None:
7969
raise ValueError(f'Browser [{browser}] not supported.')
8070

81-
return setup_browser(headless=is_headless, tmp_folder=tmp_folder)
71+
return setup_browser(headless=is_headless, tmp_folder=tmp_folder, download_driver=download_driver)
72+
73+
74+
def factory_driver_manager(browser: str):
75+
dict_driver_manager = {
76+
'chrome': ChromeDriverManager,
77+
'firefox': GeckoDriverManager,
78+
'edge': EdgeChromiumDriverManager
79+
}
80+
81+
driver_manager = dict_driver_manager.get(browser, None)
82+
83+
if dict_driver_manager is None:
84+
raise ValueError(f'Driver to [{browser}] not supported.')
85+
86+
return driver_manager
8287

8388

8489
@pytest.fixture
@@ -88,13 +93,23 @@ def tmp_folder() -> str:
8893
shutil.rmtree(folder)
8994

9095

91-
@pytest.fixture
92-
def web(request, tmp_folder: str):
96+
@pytest.fixture(autouse=True, scope="session")
97+
def download_driver(request):
98+
folder_driver = tempfile.mkdtemp()
99+
browser = request.config.getoption("--browser") or Browser.CHROME
100+
manager = factory_driver_manager(browser=browser)
101+
installed_driver = manager(path=folder_driver).install()
102+
yield installed_driver
103+
shutil.rmtree(folder_driver)
104+
93105

106+
@pytest.fixture
107+
def web(request, tmp_folder: str, download_driver: str):
94108
browser = request.config.getoption("--browser") or Browser.CHROME
95109
is_headless = request.config.getoption("--headless")
96110

97-
web = factory_setup_browser(browser=browser, is_headless=is_headless, tmp_folder=tmp_folder)
111+
web = factory_setup_browser(browser=browser, is_headless=is_headless, tmp_folder=tmp_folder,
112+
download_driver=download_driver)
98113
yield web
99114
web.stop_browser()
100115

test-requirements.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
pytest
2-
pytest-xdist
2+
pytest-xdist
3+
webdriver-manager

web-drivers/linux/chromedriver

-14.4 MB
Binary file not shown.

web-drivers/linux/geckodriver

-8.27 MB
Binary file not shown.

web-drivers/linux/msedgedriver

-13.6 MB
Binary file not shown.

web-drivers/macos/chromedriver

-15.7 MB
Binary file not shown.

web-drivers/macos/geckodriver

-4.89 MB
Binary file not shown.

web-drivers/macos/msedgedriver

-17.3 MB
Binary file not shown.
-11.2 MB
Binary file not shown.

0 commit comments

Comments
 (0)