1
1
import os
2
2
3
3
from selenium .webdriver .chrome .webdriver import WebDriver as ChromeDriver
4
+ from selenium .webdriver .remote .webdriver import WebDriver as RemoteDriver
5
+ from selenium .webdriver .chrome .options import Options as ChromeOptions
6
+ from selenium .webdriver .common .desired_capabilities import DesiredCapabilities
4
7
5
8
from JDI .web .selenium .driver .driver_types import DriverTypes
6
9
from JDI .web .selenium .driver .web_driver_provider import WebDriverProvider
10
13
class SeleniumDriverFactory (object ):
11
14
12
15
def __init__ (self ):
16
+ self .options = None
13
17
self .current_driver = None
14
18
self .browser_size = None
15
19
self .drivers_path = JDISettings .get_driver_path ()
20
+ self .capabilities = {}
16
21
17
- def register_driver (self , driver_name ):
22
+ def register_driver (self , driver_name , options , capabilities , executor ):
18
23
driver_name = driver_name .lower ()
24
+ self .set_driver_options_and_capabilities (driver_name , options , capabilities , executor )
25
+ if executor is not None :
26
+ self .current_driver = self .register_remote_driver (executor )
27
+ else :
28
+ if driver_name == DriverTypes .chrome .name :
29
+ self .current_driver = self .register_chrome_driver ()
30
+ if driver_name == DriverTypes .firefox .name :
31
+ self .current_driver = self .register_firefox_driver ()
32
+ return driver_name
33
+
34
+ def set_driver_options_and_capabilities (self , driver_name , options , capabilities , executor ):
19
35
if driver_name == DriverTypes .chrome .name :
20
- self .current_driver = self .register_chrome_driver ()
36
+ self .options = ChromeOptions ()
37
+ for arg in options : self .options .add_argument (arg )
38
+ if not capabilities and executor is not None :
39
+ self .capabilities = DesiredCapabilities .CHROME
21
40
if driver_name == DriverTypes .firefox .name :
22
- self .current_driver = self .register_firefox_driver ()
23
- return driver_name
41
+ self .options = ChromeOptions ()
42
+ for arg in options : self .options .add_argument (arg )
43
+ if not capabilities and executor is not None :
44
+ self .capabilities = DesiredCapabilities .FIREFOX
45
+ if capabilities :
46
+ self .capabilities = capabilities
24
47
25
48
def register_chrome_driver (self ):
26
49
chrome_driver = WebDriverProvider .get_chrome_driver_path ()
27
50
os .environ ["webdriver.chrome.driver" ] = chrome_driver
28
-
29
- return self .__web_driver_settings (ChromeDriver (chrome_driver ))
51
+ return self .__web_driver_settings (ChromeDriver (executable_path = chrome_driver ,
52
+ options = self .options ,
53
+ desired_capabilities = self .capabilities ))
30
54
31
55
def register_firefox_driver (self ):
32
56
raise NotImplementedError
33
57
58
+ def register_remote_driver (self , executor ):
59
+ chrome_driver = WebDriverProvider .get_chrome_driver_path ()
60
+ os .environ ["webdriver.chrome.driver" ] = chrome_driver
61
+ driver = self .__web_driver_settings (RemoteDriver (command_executor = executor ,
62
+ options = self .options ,
63
+ desired_capabilities = self .capabilities ,
64
+ keep_alive = True ))
65
+ return driver
66
+
34
67
def __web_driver_settings (self , driver ):
35
68
if self .browser_size is None :
36
69
driver .maximize_window ()
@@ -39,13 +72,12 @@ def __web_driver_settings(self, driver):
39
72
driver .implicitly_wait (JDISettings .get_current_timeout_sec ())
40
73
return driver
41
74
42
- def get_driver (self ):
75
+ def get_driver (self , options = [], capabilities = {}, executor = None ):
43
76
if self .current_driver is not None :
44
77
return self .current_driver
45
78
else :
46
- self .register_driver (DriverTypes .chrome .name )
79
+ self .register_driver (driver_name = DriverTypes .chrome .name ,
80
+ options = options ,
81
+ capabilities = capabilities ,
82
+ executor = executor )
47
83
return self .current_driver
48
-
49
-
50
-
51
-
0 commit comments