Do type checks on values we get from JS
This commit is contained in:
parent
4f92fe6895
commit
06e317ac53
@ -39,6 +39,37 @@ class WebEngineElement(webelem.AbstractWebElement):
|
||||
|
||||
def __init__(self, js_dict, tab):
|
||||
super().__init__(tab)
|
||||
# Do some sanity checks on the data we get from JS
|
||||
js_dict_types = {
|
||||
'id': int,
|
||||
'text': str,
|
||||
'value': str,
|
||||
'tag_name': str,
|
||||
'outer_xml': str,
|
||||
'class_name': str,
|
||||
'rects': list,
|
||||
'attributes': dict,
|
||||
}
|
||||
assert set(js_dict.keys()).issubset(js_dict_types.keys())
|
||||
for name, typ in js_dict_types.items():
|
||||
if name in js_dict and not isinstance(js_dict[name], typ):
|
||||
raise TypeError("Got {} for {} from JS but expected {}: {}".format(
|
||||
type(js_dict[name]), name, typ, js_dict))
|
||||
for name, value in js_dict['attributes'].items():
|
||||
if not isinstance(name, str):
|
||||
raise TypeError("Got {} ({}) for attribute name from JS: "
|
||||
"{}".format(name, type(name), js_dict))
|
||||
if not isinstance(value, str):
|
||||
raise TypeError("Got {} ({}) for attribute {} from JS: "
|
||||
"{}".format(value, type(value), name, js_dict))
|
||||
for rect in js_dict['rects']:
|
||||
assert set(rect.keys()) == {'top', 'right', 'bottom', 'left',
|
||||
'height', 'width'}, rect.keys()
|
||||
for value in rect.values():
|
||||
if not isinstance(value, (int, float)):
|
||||
raise TypeError("Got {} ({}) for rect from JS: "
|
||||
"{}".format(value, type(value), js_dict))
|
||||
|
||||
self._id = js_dict['id']
|
||||
self._js_dict = js_dict
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user