Skip to content
This repository has been archived by the owner on Nov 23, 2023. It is now read-only.

fix: readd runonfailure feature #17

Merged
merged 1 commit into from
Feb 16, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion AppiumFlutterLibrary/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ class AppiumFlutterLibrary(
ROBOT_LIBRARY_SCOPE = 'GLOBAL'
ROBOT_LIBRARY_VERSION = VERSION

def __init__(self, timeout=5, run_on_failure='Capture Page Screenshot'):
def __init__(self, timeout=5, run_on_failure='AppiumFlutterLibrary.Capture Page Screenshot'):
"""AppiumFlutterLibrary can be imported with optional arguments.
``timeout`` is the default timeout used to wait for all waiting actions.
It can be later set with `Set Appium Timeout`.
Expand Down
33 changes: 30 additions & 3 deletions AppiumFlutterLibrary/keywords/_runonfailure.py
Original file line number Diff line number Diff line change
@@ -1,20 +1,47 @@
# -*- coding: utf-8 -*-

from robot.libraries import BuiltIn
from AppiumFlutterLibrary.keywords.keywordgroup import KeywordGroup

BUILTIN = BuiltIn.BuiltIn()

class _RunOnFailureKeyWords(KeywordGroup):
def __init__(self):
self._run_on_failure_keyword = None
self._running_on_failure_routine = None
self._running_on_failure_routine = False

# Public

def register_keyword_to_run_on_failure(self, keyword):
old_keyword = self._run_on_failure_keyword
old_keyword_text = old_keyword if old_keyword is not None else "Nothing"

new_keyword = keyword if keyword.strip().lower() != "nothing" else "Nothing"
new_keyword = keyword if keyword.strip().lower() != "nothing" else None
new_keyword_text = new_keyword if new_keyword is not None else "Nothing"

self._run_on_failure_keyword = new_keyword
self._info('%s will be run on failure.' % new_keyword_text)

return old_keyword_text

# Private

def _run_on_failure(self):
if self._run_on_failure_keyword is None:
return
if self._running_on_failure_routine:
return
self._running_on_failure_routine = True
try:
BUILTIN.run_keyword(self._run_on_failure_keyword)
except Exception as err:
self._run_on_failure_error(err)
finally:
self._running_on_failure_routine = False

return old_keyword
def _run_on_failure_error(self, err):
err = "Keyword '%s' could not be run on failure: %s" % (self._run_on_failure_keyword, err)
if hasattr(self, '_warn'):
self._warn(err)
return
raise Exception(err)