diff --git a/qutebrowser/browser/webengine/webengineelem.py b/qutebrowser/browser/webengine/webengineelem.py index a2bbab15b..8b1f633b8 100644 --- a/qutebrowser/browser/webengine/webengineelem.py +++ b/qutebrowser/browser/webengine/webengineelem.py @@ -56,9 +56,7 @@ class WebEngineElement(webelem.AbstractWebElement): def __setitem__(self, key, val): self._js_dict['attributes'][key] = val - js_code = javascript.assemble('webelem', 'set_attribute', self._id, - key, val) - self._tab.run_js_async(js_code) + self._js_call('set_attribute', key, val) def __delitem__(self, key): log.stub() @@ -69,6 +67,11 @@ class WebEngineElement(webelem.AbstractWebElement): def __len__(self): return len(self._js_dict['attributes']) + def _js_call(self, name, *args, callback=None): + """Wrapper to run stuff from webelem.js.""" + js_code = javascript.assemble('webelem', name, self._id, *args) + self._tab.run_js_async(js_code, callback=callback) + def has_frame(self): return True @@ -99,15 +102,13 @@ class WebEngineElement(webelem.AbstractWebElement): return self._js_dict.get('value', None) def set_value(self, value): - js_code = javascript.assemble('webelem', 'set_value', self._id, value) - self._tab.run_js_async(js_code) + self._js_call('set_value', value) def insert_text(self, text): if not self.is_editable(strict=True): raise webelem.Error("Element is not editable!") log.webelem.debug("Inserting text into element {!r}".format(self)) - js_code = javascript.assemble('webelem', 'insert_text', self._id, text) - self._tab.run_js_async(js_code) + self._js_call('insert_text', text) def rect_on_view(self, *, elem_geometry=None, no_js=False): """Get the geometry of the element relative to the webview. @@ -153,15 +154,11 @@ class WebEngineElement(webelem.AbstractWebElement): def remove_blank_target(self): if self._js_dict['attributes'].get('target') == '_blank': self._js_dict['attributes']['target'] = '_top' - js_code = javascript.assemble('webelem', 'remove_blank_target', - self._id) - self._tab.run_js_async(js_code) + self._js_call('remove_blank_target') def _move_text_cursor(self): if self.is_text_input() and self.is_editable(): - js_code = javascript.assemble('webelem', 'move_cursor_to_end', - self._id) - self._tab.run_js_async(js_code) + self._js_call('move_cursor_to_end') def _click_editable(self, click_target): # WORKAROUND for https://bugreports.qt.io/browse/QTBUG-58515 @@ -175,8 +172,7 @@ class WebEngineElement(webelem.AbstractWebElement): # pylint: enable=no-member self._tab.send_event(ev) # This actually "clicks" the element by calling focus() on it in JS. - js_code = javascript.assemble('webelem', 'focus', self._id) - self._tab.run_js_async(js_code) + self._js_call('focus') self._move_text_cursor() def _click_js(self, _click_target): @@ -196,5 +192,4 @@ class WebEngineElement(webelem.AbstractWebElement): def reset_setting(_arg): settings.setAttribute(attribute, could_open_windows) - js_code = javascript.assemble('webelem', 'click', self._id) - self._tab.run_js_async(js_code, reset_setting) + self._js_call('click', callback=reset_setting)