62 def __init__(self, message='', details='', syntax=False):
95 def __init__(self, message='', test_timeout=True):
100 keyword_timeout = property
113 def __init__(self, message, test_timeout=False, keyword_timeout=False,
114 syntax=False, exit=False, continue_on_failure=False,
115 skip=False, return_value=None):
116 if '\r\n' in message:
117 message = message.replace(
'\r\n',
'\n')
135 dont_continue = property
141 continue_on_failure = property
146 @continue_on_failure.setter
150 for child
in getattr(self,
'_errors', []):
151 if child
is not self:
152 child.continue_on_failure = continue_on_failure
160 return context.continue_on_failure(default=
True)
162 if context.in_teardown:
174 return 'FAIL' if not self.
skipskip
else 'SKIP'
184 error = details.error
185 timeout = isinstance(error, TimeoutError)
186 test_timeout = timeout
and error.test_timeout
187 keyword_timeout = timeout
and error.keyword_timeout
188 syntax = isinstance(error, DataError)
and error.syntax
189 exit_on_failure = self.
_get_get(error,
'EXIT_ON_FAILURE')
190 continue_on_failure = self.
_get_get(error,
'CONTINUE_ON_FAILURE')
191 skip = self.
_get_get(error,
'SKIP_EXECUTION')
192 super().
__init__(details.message, test_timeout, keyword_timeout, syntax,
193 exit_on_failure, continue_on_failure, skip)
196 return bool(getattr(error,
'ROBOT_' + attr,
False))
207 messages = [e.message
for e
in errors]
208 if len(messages) == 1:
210 prefix =
'Several failures occurred:'
211 if any(msg.startswith(
'*HTML*')
for msg
in messages):
212 html_prefix =
'*HTML* '
213 messages = [self.
_html_format_html_format(msg)
for msg
in messages]
216 if any(e.skip
for e
in errors):
217 skip_idx = errors.index([e
for e
in errors
if e.skip][0])
218 skip_msg = messages[skip_idx]
219 messages = messages[:skip_idx] + messages[skip_idx+1:]
220 if len(messages) == 1:
221 return '%s%s\n\nAlso failure occurred:\n%s' \
222 % (html_prefix, skip_msg, messages[0])
223 prefix =
'%s\n\nAlso failures occurred:' % skip_msg
225 [html_prefix + prefix] +
226 [
'%d) %s' % (i, m)
for i, m
in enumerate(messages, start=1)]
231 if msg.startswith(
'*HTML*'):
232 return msg[6:].lstrip()
237 'test_timeout': any(e.test_timeout
for e
in errors),
238 'keyword_timeout': any(e.keyword_timeout
for e
in errors),
239 'syntax': any(e.syntax
for e
in errors),
240 'exit': any(e.exit
for e
in errors),
241 'continue_on_failure': all(e.continue_on_failure
for e
in errors),
242 'skip': any(e.skip
for e
in errors)
251 def __init__(self, run_errors=None, teardown_errors=None):
253 self.
_get_message_get_message(run_errors, teardown_errors))
254 if run_errors
and not teardown_errors:
260 return [err
for err
in errors
if err]
263 run_msg = run_errors.message
if run_errors
else ''
264 td_msg = teardown_errors.message
if teardown_errors
else ''
268 return 'Keyword teardown failed:\n%s' % td_msg
269 return '%s\n\nAlso keyword teardown failed:\n%s' % (run_msg, td_msg)
287 earlier_failures = property
312 super().
__init__(
"Invalid 'CONTINUE' usage.")
319 super().
__init__(
"Invalid 'BREAK' usage.")
325 def __init__(self, return_value=None, failures=None):
326 super().
__init__(
"Invalid 'RETURN' usage.", return_value=return_value)
334 def __init__(self, message='', details='', fatal=False, continuable=False):
Used by CONTINUE statement.
def __init__(self, message='', details='', syntax=False)
Used for communicating failures in test execution.
def _format_message(self, errors)
def _get_attrs(self, errors)
def __init__(self, errors, message=None)
def _html_format(self, msg)
Base class for all exceptions communicating that execution passed.
def set_earlier_failures(self, failures)
def __init__(self, message=None, **kwargs)
def can_continue(self, context, templated=False)
def continue_on_failure(self)
def continue_on_failure(self, continue_on_failure)
def __init__(self, message, test_timeout=False, keyword_timeout=False, syntax=False, exit=False, continue_on_failure=False, skip=False, return_value=None)
Can be used when the core framework goes to unexpected state.
def _get(self, error, attr)
def __init__(self, details)
Used when no keyword is found or there is more than one match.
def __init__(self, message='', details='')
Used by 'Pass Execution' keyword.
def __init__(self, message)
Used by Remote library to report remote errors.
ROBOT_CONTINUE_ON_FAILURE
def __init__(self, message='', details='', fatal=False, continuable=False)
Used by 'RETURN' statement.
def __init__(self, return_value=None, failures=None)
Base class for Robot Framework errors.
def __init__(self, message='', details='')
Used when a test or keyword timeout occurs.
def __init__(self, message='', test_timeout=True)
def _get_errors(self, *errors)
def __init__(self, run_errors=None, teardown_errors=None)
def _get_message(self, run_errors, teardown_errors)
Used when variable does not exist.
def __init__(self, message='', details='')
def html_escape(text, linkify=True)
def cut_long_message(msg)