Replace WebElement.frame() by .has_frame()

This commit is contained in:
Florian Bruhin 2016-08-17 17:53:14 +02:00
parent 91b43c5cef
commit 6f24221c54
5 changed files with 21 additions and 14 deletions

View File

@ -117,7 +117,7 @@ class HintLabel(QLabel):
@pyqtSlot() @pyqtSlot()
def _move_to_elem(self): def _move_to_elem(self):
"""Reposition the label to its element.""" """Reposition the label to its element."""
if self.elem.frame() is None: if not self.elem.has_frame():
# This sometimes happens for some reason... # This sometimes happens for some reason...
log.hints.debug("Frame for {!r} vanished!".format(self)) log.hints.debug("Frame for {!r} vanished!".format(self))
self.hide() self.hide()
@ -329,10 +329,14 @@ class HintActions(QObject):
else: else:
prompt = None prompt = None
# FIXME:qtwebengine get a proper API for this
# pylint: disable=protected-access
page = elem._elem.webFrame().page()
# pylint: enable=protected-access
download_manager = objreg.get('download-manager', scope='window', download_manager = objreg.get('download-manager', scope='window',
window=self._win_id) window=self._win_id)
download_manager.get(url, page=elem.frame().page(), download_manager.get(url, page=page, prompt_download_directory=prompt)
prompt_download_directory=prompt)
def call_userscript(self, elem, context): def call_userscript(self, elem, context):
"""Call a userscript from a hint. """Call a userscript from a hint.
@ -897,7 +901,7 @@ class HintManager(QObject):
} }
elem = self._context.labels[keystr].elem elem = self._context.labels[keystr].elem
if elem.frame() is None: if not elem.has_frame():
message.error(self._win_id, message.error(self._win_id,
"This element has no webframe.", "This element has no webframe.",
immediately=True) immediately=True)

View File

@ -103,9 +103,8 @@ class AbstractWebElement(collections.abc.MutableMapping):
html = None html = None
return utils.get_repr(self, html=html) return utils.get_repr(self, html=html)
def frame(self): def has_frame(self):
"""Get the main frame of this element.""" """Check if this element has a valid frame attached."""
# FIXME:qtwebengine get rid of this?
raise NotImplementedError raise NotImplementedError
def geometry(self): def geometry(self):

View File

@ -58,9 +58,8 @@ class WebEngineElement(webelem.AbstractWebElement):
def __len__(self): def __len__(self):
return len(self._js_dict['attributes']) return len(self._js_dict['attributes'])
def frame(self): def has_frame(self):
log.stub() return True
return None
def geometry(self): def geometry(self):
log.stub() log.stub()

View File

@ -83,9 +83,9 @@ class WebKitElement(webelem.AbstractWebElement):
if self._elem.isNull(): if self._elem.isNull():
raise IsNullError('Element {} vanished!'.format(self._elem)) raise IsNullError('Element {} vanished!'.format(self._elem))
def frame(self): def has_frame(self):
self._check_vanished() self._check_vanished()
return self._elem.webFrame() return self._elem.webFrame() is not None
def geometry(self): def geometry(self):
self._check_vanished() self._check_vanished()

View File

@ -255,7 +255,7 @@ class TestWebKitElement:
lambda e: None in e, lambda e: None in e,
list, # __iter__ list, # __iter__
len, len,
lambda e: e.frame(), lambda e: e.has_frame(),
lambda e: e.geometry(), lambda e: e.geometry(),
lambda e: e.style_property('visibility', strategy='computed'), lambda e: e.style_property('visibility', strategy='computed'),
lambda e: e.text(), lambda e: e.text(),
@ -394,7 +394,6 @@ class TestWebKitElement:
assert elem.debug_text() == expected assert elem.debug_text() == expected
@pytest.mark.parametrize('attribute, code', [ @pytest.mark.parametrize('attribute, code', [
('webFrame', lambda e: e.frame()),
('geometry', lambda e: e.geometry()), ('geometry', lambda e: e.geometry()),
('toOuterXml', lambda e: e.outer_xml()), ('toOuterXml', lambda e: e.outer_xml()),
]) ])
@ -404,6 +403,12 @@ class TestWebKitElement:
setattr(mock, 'return_value', sentinel) setattr(mock, 'return_value', sentinel)
assert code(elem) is sentinel assert code(elem) is sentinel
@pytest.mark.parametrize('frame, expected', [
(object(), True), (None, False)])
def test_has_frame(self, elem, frame, expected):
elem._elem.webFrame.return_value = frame
assert elem.has_frame() == expected
def test_tag_name(self, elem): def test_tag_name(self, elem):
elem._elem.tagName.return_value = 'SPAN' elem._elem.tagName.return_value = 'SPAN'
assert elem.tag_name() == 'span' assert elem.tag_name() == 'span'