88import platform
99
1010from 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
1215OS_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
0 commit comments