Skip to content

Commit e6ccf15

Browse files
Zoiazhidelev
Zoia
authored andcommitted
Add driver desired capabilities and remote driver option
1 parent 94e41c5 commit e6ccf15

File tree

3 files changed

+48
-16
lines changed

3 files changed

+48
-16
lines changed

JDI/web/selenium/driver/selenium_driver_factory.py

+44-12
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import os
22

33
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
47

58
from JDI.web.selenium.driver.driver_types import DriverTypes
69
from JDI.web.selenium.driver.web_driver_provider import WebDriverProvider
@@ -10,27 +13,57 @@
1013
class SeleniumDriverFactory(object):
1114

1215
def __init__(self):
16+
self.options = None
1317
self.current_driver = None
1418
self.browser_size = None
1519
self.drivers_path = JDISettings.get_driver_path()
20+
self.capabilities = {}
1621

17-
def register_driver(self, driver_name):
22+
def register_driver(self, driver_name, options, capabilities, executor):
1823
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):
1935
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
2140
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
2447

2548
def register_chrome_driver(self):
2649
chrome_driver = WebDriverProvider.get_chrome_driver_path()
2750
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))
3054

3155
def register_firefox_driver(self):
3256
raise NotImplementedError
3357

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+
3467
def __web_driver_settings(self, driver):
3568
if self.browser_size is None:
3669
driver.maximize_window()
@@ -39,13 +72,12 @@ def __web_driver_settings(self, driver):
3972
driver.implicitly_wait(JDISettings.get_current_timeout_sec())
4073
return driver
4174

42-
def get_driver(self):
75+
def get_driver(self, options=[], capabilities={}, executor=None):
4376
if self.current_driver is not None:
4477
return self.current_driver
4578
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)
4783
return self.current_driver
48-
49-
50-
51-

JDI/web/selenium/settings/WebSettings.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ def set_driver_factory(driver_factory):
1717
JDISettings._driver_factory = driver_factory
1818

1919
@staticmethod
20-
def use_driver(driver_name):
20+
def use_driver(driver_name, options=[], capabilities={}, executor=None):
2121
JDISettings._driver_factory = SeleniumDriverFactory()
2222
WebSettings.set_driver_factory(JDISettings._driver_factory)
23-
return JDISettings._driver_factory.register_driver(driver_name)
23+
return JDISettings._driver_factory.register_driver(driver_name, options, capabilities, executor)
2424

2525
@staticmethod
2626
def quit_browser():

JDI/web/selenium/settings/web_settings.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ def set_driver_factory(driver_factory):
1717
JDISettings._driver_factory = driver_factory
1818

1919
@staticmethod
20-
def use_driver(driver_name):
20+
def use_driver(driver_name, options=[], capabilities={}, executor=None):
2121
JDISettings._driver_factory = SeleniumDriverFactory()
2222
WebSettings.set_driver_factory(JDISettings._driver_factory)
23-
return JDISettings._driver_factory.register_driver(driver_name)
23+
return JDISettings._driver_factory.register_driver(driver_name, options, capabilities, executor)
2424

2525
@staticmethod
2626
def quit_browser():

0 commit comments

Comments
 (0)