Skip to content

Commit 87251cf

Browse files
authored
Support headless chrome and firefox whith Selenium Grid (#1201)
Fixes #1098
1 parent c69f2cc commit 87251cf

File tree

2 files changed

+59
-14
lines changed

2 files changed

+59
-14
lines changed

src/SeleniumLibrary/keywords/webdrivertools.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,8 @@ def _parse_capabilities(self, capabilities):
7777
def create_chrome(self, desired_capabilities, remote_url, options=None):
7878
default = webdriver.DesiredCapabilities.CHROME
7979
if is_truthy(remote_url):
80-
return self._remote(default, desired_capabilities, remote_url)
80+
return self._remote(default, desired_capabilities, remote_url,
81+
options=options)
8182
capabilities = self._combine_capabilites(default, desired_capabilities)
8283
if SELENIUM_VERSION.major >= 3 and SELENIUM_VERSION.minor >= 8:
8384
return webdriver.Chrome(desired_capabilities=capabilities,
@@ -97,7 +98,8 @@ def create_firefox(self, desired_capabilities, remote_url, ff_profile_dir,
9798
default = webdriver.DesiredCapabilities.FIREFOX
9899
profile = self._get_ff_profile(ff_profile_dir)
99100
if is_truthy(remote_url):
100-
return self._remote(default, desired_capabilities, remote_url, profile)
101+
return self._remote(default, desired_capabilities, remote_url,
102+
profile, options)
101103
capabilities = self._combine_capabilites(default, desired_capabilities)
102104
if SELENIUM_VERSION.major >= 3 and SELENIUM_VERSION.minor >= 8:
103105
return webdriver.Firefox(capabilities=capabilities, options=options,
@@ -180,10 +182,14 @@ def create_iphone(self, desired_capabilities, remote_url):
180182
return self._remote(default, desired_capabilities, remote_url)
181183

182184
def _remote(self, default_capabilities, user_capabilities, remote_url,
183-
profile_dir=None):
185+
profile_dir=None, options=None):
184186
remote_url = str(remote_url)
185187
capabilities = self._combine_capabilites(default_capabilities,
186188
user_capabilities)
189+
if SELENIUM_VERSION.major >= 3 and SELENIUM_VERSION.minor >= 8:
190+
return webdriver.Remote(command_executor=remote_url,
191+
desired_capabilities=capabilities,
192+
browser_profile=profile_dir, options=options)
187193
return webdriver.Remote(command_executor=remote_url,
188194
desired_capabilities=capabilities,
189195
browser_profile=profile_dir)

utest/test/keywords/test_webdrivercreator.py

Lines changed: 50 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@ def test_chrome_remote(self):
6969
caps = webdriver.DesiredCapabilities.CHROME
7070
when(webdriver).Remote(command_executor=url,
7171
desired_capabilities=caps,
72-
browser_profile=None).thenReturn(expected_webdriver)
72+
browser_profile=None,
73+
options=None).thenReturn(expected_webdriver)
7374
driver = self.creator.create_chrome({}, url)
7475
self.assertEqual(driver, expected_webdriver)
7576

@@ -90,6 +91,19 @@ def test_chrome_healdless(self):
9091
verify(options, times=0).set_headless()
9192
self.assertEqual(driver, expected_webdriver)
9293

94+
def test_chrome_healdless_with_grid(self):
95+
caps = webdriver.DesiredCapabilities.CHROME
96+
expected_webdriver = mock()
97+
options = mock()
98+
when(webdriver).ChromeOptions().thenReturn(options)
99+
remote_url = 'localhost:4444'
100+
when(webdriver).Remote(command_executor=remote_url,
101+
desired_capabilities=caps, options=options,
102+
browser_profile=None,).thenReturn(expected_webdriver)
103+
driver = self.creator.create_headless_chrome({}, remote_url)
104+
verify(options).set_headless()
105+
self.assertEqual(driver, expected_webdriver)
106+
93107
def test_firefox(self):
94108
expected_webdriver = mock()
95109
profile = mock()
@@ -116,7 +130,8 @@ def test_firefox_remote(self):
116130
caps = webdriver.DesiredCapabilities.FIREFOX
117131
when(webdriver).Remote(command_executor=url,
118132
desired_capabilities=caps,
119-
browser_profile=profile).thenReturn(expected_webdriver)
133+
browser_profile=profile,
134+
options=None).thenReturn(expected_webdriver)
120135
driver = self.creator.create_firefox({}, url, None)
121136
self.assertEqual(driver, expected_webdriver)
122137

@@ -157,6 +172,21 @@ def test_firefox_headless(self):
157172
driver = self.creator.create_headless_firefox({}, None, None)
158173
self.assertEqual(driver, expected_webdriver)
159174

175+
def test_firefox_healdless_with_grid(self):
176+
caps = webdriver.DesiredCapabilities.FIREFOX
177+
expected_webdriver = mock()
178+
options = mock()
179+
when(webdriver).FirefoxOptions().thenReturn(options)
180+
profile = mock()
181+
when(webdriver).FirefoxProfile().thenReturn(profile)
182+
remote_url = 'localhost:4444'
183+
when(webdriver).Remote(command_executor=remote_url,
184+
desired_capabilities=caps, options=options,
185+
browser_profile=profile,).thenReturn(expected_webdriver)
186+
driver = self.creator.create_headless_firefox({}, remote_url, None)
187+
verify(options).set_headless()
188+
self.assertEqual(driver, expected_webdriver)
189+
160190
def test_ie(self):
161191
expected_webdriver = mock()
162192
caps = webdriver.DesiredCapabilities.INTERNETEXPLORER
@@ -170,7 +200,8 @@ def test_ie_remote(self):
170200
caps = webdriver.DesiredCapabilities.INTERNETEXPLORER
171201
when(webdriver).Remote(command_executor=url,
172202
desired_capabilities=caps,
173-
browser_profile=None).thenReturn(expected_webdriver)
203+
browser_profile=None,
204+
options=None).thenReturn(expected_webdriver)
174205
driver = self.creator.create_ie({}, url)
175206
self.assertEqual(driver, expected_webdriver)
176207

@@ -187,7 +218,8 @@ def test_edge_remote(self):
187218
caps = webdriver.DesiredCapabilities.EDGE
188219
when(webdriver).Remote(command_executor=url,
189220
desired_capabilities=caps,
190-
browser_profile=None).thenReturn(expected_webdriver)
221+
browser_profile=None,
222+
options=None).thenReturn(expected_webdriver)
191223
driver = self.creator.create_edge({}, url)
192224
self.assertEqual(driver, expected_webdriver)
193225

@@ -204,7 +236,8 @@ def test_opera_remote(self):
204236
caps = webdriver.DesiredCapabilities.OPERA
205237
when(webdriver).Remote(command_executor=url,
206238
desired_capabilities=caps,
207-
browser_profile=None).thenReturn(expected_webdriver)
239+
browser_profile=None,
240+
options=None).thenReturn(expected_webdriver)
208241
driver = self.creator.create_opera({}, url)
209242
self.assertEqual(driver, expected_webdriver)
210243

@@ -221,7 +254,8 @@ def test_safari_remote(self):
221254
caps = webdriver.DesiredCapabilities.SAFARI
222255
when(webdriver).Remote(command_executor=url,
223256
desired_capabilities=caps,
224-
browser_profile=None).thenReturn(expected_webdriver)
257+
browser_profile=None,
258+
options=None).thenReturn(expected_webdriver)
225259
driver = self.creator.create_safari({}, url)
226260
self.assertEqual(driver, expected_webdriver)
227261

@@ -238,7 +272,8 @@ def test_phantomjs_remote(self):
238272
caps = webdriver.DesiredCapabilities.PHANTOMJS
239273
when(webdriver).Remote(command_executor=url,
240274
desired_capabilities=caps,
241-
browser_profile=None).thenReturn(expected_webdriver)
275+
browser_profile=None,
276+
options=None).thenReturn(expected_webdriver)
242277
driver = self.creator.create_phantomjs({}, url)
243278
self.assertEqual(driver, expected_webdriver)
244279

@@ -247,7 +282,8 @@ def test_htmlunit(self):
247282
caps = webdriver.DesiredCapabilities.HTMLUNIT
248283
when(webdriver).Remote(command_executor='None',
249284
desired_capabilities=caps,
250-
browser_profile=None).thenReturn(expected_webdriver)
285+
browser_profile=None,
286+
options=None).thenReturn(expected_webdriver)
251287
driver = self.creator.create_htmlunit({}, None)
252288
self.assertEqual(driver, expected_webdriver)
253289

@@ -256,7 +292,8 @@ def test_htmlunit_with_js(self):
256292
caps = webdriver.DesiredCapabilities.HTMLUNITWITHJS
257293
when(webdriver).Remote(command_executor='None',
258294
desired_capabilities=caps,
259-
browser_profile=None).thenReturn(expected_webdriver)
295+
browser_profile=None,
296+
options=None).thenReturn(expected_webdriver)
260297
driver = self.creator.create_htmlunit_with_js({}, None)
261298
self.assertEqual(driver, expected_webdriver)
262299

@@ -265,7 +302,8 @@ def test_android(self):
265302
caps = webdriver.DesiredCapabilities.ANDROID
266303
when(webdriver).Remote(command_executor='None',
267304
desired_capabilities=caps,
268-
browser_profile=None).thenReturn(expected_webdriver)
305+
browser_profile=None,
306+
options=None).thenReturn(expected_webdriver)
269307
driver = self.creator.create_android({}, None)
270308
self.assertEqual(driver, expected_webdriver)
271309

@@ -274,7 +312,8 @@ def test_iphone(self):
274312
caps = webdriver.DesiredCapabilities.IPHONE
275313
when(webdriver).Remote(command_executor='None',
276314
desired_capabilities=caps,
277-
browser_profile=None).thenReturn(expected_webdriver)
315+
browser_profile=None,
316+
options=None).thenReturn(expected_webdriver)
278317
driver = self.creator.create_iphone({}, None)
279318
self.assertEqual(driver, expected_webdriver)
280319

0 commit comments

Comments
 (0)