import re
from .window import Window
[docs]class HasWindow(object):
[docs] def windows(self, *args, **kwargs):
"""
Returns browser windows list
:rtype: list[Window]
:Example:
browser.windows(title='closeable window')
"""
all = [Window(self, {'handle': handle}) for handle in self.driver.window_handles]
if not args and not kwargs:
return all
else:
return self._filter_windows(self._extract_selector(*args, **kwargs), all)
[docs] def window(self, *args, **kwargs):
"""
Returns browser window
:rtype: Window
:Example:
browser.window(title='closeable window')
"""
return Window(self, self._extract_selector(*args, **kwargs))
@property
def original_window(self):
"""
Returns original window if defined, current window if not
:rtype: Window
:Example:
browser.window(title='closeable window').use()
browser.original_window.use()
"""
if not self._original_window:
self._original_window = self.window()
return self._original_window
# private
def _filter_windows(self, selector, windows):
if not all(key in ['title', 'url'] for key in selector.keys()):
raise ValueError('invalid window selector: {}'.format(selector))
return [w for w in windows if all(re.search(v, getattr(w, k)) is not None
for k, v in selector.items())]