Skip to content

Commit 990209e

Browse files
committed
Merge pull request robotframework#336 from ombre42/window-ids-unexpected-type
Pass window.id through if not None
2 parents 6d33470 + e806e18 commit 990209e

File tree

3 files changed

+76
-4
lines changed

3 files changed

+76
-4
lines changed

CHANGES.rst

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,12 @@ Release Notes
2121
- Fixed issue where 'Select Window’ with url strategy fails to locate window
2222
[laulaz]
2323

24+
- Fixed issue where a non-string assigned to window.id caused
25+
'Select Window' and 'Get Window *' keywords to fail.
26+
27+
A big thank you to [eweitz] and [HelioGuilherme66] for getting the
28+
continuous integration builds to go green by fixing internal tests.
29+
2430
1.5
2531
---
2632
- Copy Desired Capabilities before modifying to prevent affecting future

src/Selenium2Library/webdrivermonkeypatches.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ def get_current_window_handle(self):
2121
return self.current_window_handle
2222

2323
def get_current_window_info(self):
24-
atts = self.execute_script("return [ window.id, window.name, document.title, document.URL ];")
25-
atts = [ att if att is not None and len(att) else 'undefined'
26-
for att in atts ]
27-
return (self.current_window_handle, atts[0], atts[1], atts[2], atts[3])
24+
id_, name, title, url = self.execute_script("return [ window.id, window.name, document.title, document.URL ];")
25+
id_ = id_ if id_ is not None else 'undefined'
26+
name, title, url = (att if att else 'undefined' for att in (name, title, url))
27+
return self.current_window_handle, id_, name, title, url
2828

2929
def get_page_source(self):
3030
return self.page_source
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import unittest
2+
from selenium.webdriver.remote.webelement import WebElement
3+
from selenium.webdriver.remote.webdriver import WebDriver as RemoteWebDriver
4+
from mockito import *
5+
6+
SCRIPT = "return [ window.id, window.name, document.title, document.URL ];"
7+
HANDLE = "17c3dc18-0443-478b-aec6-ed7e2a5da7e1"
8+
9+
10+
class MockWebDriver(RemoteWebDriver):
11+
def __init__(self):
12+
pass
13+
14+
current_window_handle = HANDLE
15+
16+
17+
class WebDriverMonkeyPatchesTests(unittest.TestCase):
18+
19+
def test_window_info_values_are_strings(self):
20+
driver = MockWebDriver()
21+
when(driver).execute_script(SCRIPT).thenReturn(['id', 'name', 'title', 'url'])
22+
info = driver.get_current_window_info()
23+
self.assertEqual(info, (HANDLE, 'id', 'name', 'title', 'url'))
24+
25+
def test_window_info_values_are_empty_strings(self):
26+
driver = MockWebDriver()
27+
when(driver).execute_script(SCRIPT).thenReturn([''] * 4)
28+
info = driver.get_current_window_info()
29+
self.assertEqual(info, (HANDLE, '', 'undefined', 'undefined', 'undefined'))
30+
31+
def test_window_info_values_are_none(self):
32+
driver = MockWebDriver()
33+
when(driver).execute_script(SCRIPT).thenReturn([None] * 4)
34+
info = driver.get_current_window_info()
35+
self.assertEqual(info, (HANDLE, 'undefined', 'undefined', 'undefined', 'undefined'))
36+
37+
def test_window_id_is_bool(self):
38+
driver = MockWebDriver()
39+
when(driver).execute_script(SCRIPT).thenReturn([True, '', '', '']).thenReturn([False, '', '', ''])
40+
info = driver.get_current_window_info()
41+
self.assertEqual(info[1], True)
42+
info = driver.get_current_window_info()
43+
self.assertEqual(info[1], False)
44+
45+
def test_window_id_is_web_element(self):
46+
driver = MockWebDriver()
47+
elem = WebElement(None, '052b083c-0d6e-45ca-bda6-73ca13c42561')
48+
when(driver).execute_script(SCRIPT).thenReturn([elem, '', '', ''])
49+
info = driver.get_current_window_info()
50+
self.assertEqual(info[1], elem)
51+
52+
def test_window_id_is_container(self):
53+
driver = MockWebDriver()
54+
when(driver).execute_script(SCRIPT).thenReturn([['1'], '', '', '']).thenReturn([{'a': 2}, '', '', ''])
55+
info = driver.get_current_window_info()
56+
self.assertEqual(info[1], ['1'])
57+
info = driver.get_current_window_info()
58+
self.assertEqual(info[1], {'a': 2})
59+
60+
def test_window_id_is_empty_container(self):
61+
driver = MockWebDriver()
62+
when(driver).execute_script(SCRIPT).thenReturn([[], '', '', '']).thenReturn([{}, '', '', ''])
63+
info = driver.get_current_window_info()
64+
self.assertEqual(info[1], [])
65+
info = driver.get_current_window_info()
66+
self.assertEqual(info[1], {})

0 commit comments

Comments
 (0)