2017-02-10 2 views
1

J'ai créé un gestionnaire d'erreur personnalisé pour gérer les captures d'écran lors de l'échecgestionnaire d'erreur personnalisé pour les captures d'écran en Python-Comportez

#error_handler.py 

def screenshot_handler(func): 
    def func_wrapper(self): 
     try: 
      return func(self) 
     except Exception as e: 
      print("screenshot") 
      return func(self) 
    return func_wrapper 

#page.py 

@screenshot_handler 
def assert_login(self,a): 
    self.find_element(*DashboardPageLocators.AUTOREFRESH_BUTTON) 
    return True 

#steps.py 
""" 
i forced this to fail 
""" 

@then('map should display') 
def step_impl(context): 
    page = LoginPage(context) 
    page.assert_login() 

Je veux saisir la step argument 'map should display' alors je crée le nom de fichier. L'option la plus évidente est de copier la chaîne, mais ce serait inefficace, est-il une fonction BEHAVE que je pourrais appeler à faire gérer cette

Répondre

1

Je le fais dans la fonction after_step de environments.py:

def after_step(context, step): 
    if step.status == 'failed': 
     step_str = step.name 
     # Take screen shot and upload to s3 

Vous obtenez un accès immédiat à l'état du test et au nom de l'étape, et vous n'avez pas besoin d'inclure vos propres décorateurs de gestion des erreurs.

La variable step a un certain nombre de choses astucieuses dans ce:

(Pdb) pp(dir(step)) 

['__class__', 
'__delattr__', 
'__dict__', 
'__dir__', 
'__doc__', 
'__eq__', 
'__format__', 
'__ge__', 
'__getattribute__', 
'__gt__', 
'__hash__', 
'__init__', 
'__init_subclass__', 
'__le__', 
'__lt__', 
'__module__', 
'__ne__', 
'__new__', 
'__reduce__', 
'__reduce_ex__', 
'__repr__', 
'__setattr__', 
'__sizeof__', 
'__str__', 
'__subclasshook__', 
'__weakref__', 
'duration', 
'error_message', 
'exc_traceback', 
'exception', 
'filename', 
'keyword', 
'line', 
'location', 
'name', 
'replay', 
'reset', 
'run', 
'set_values', 
'status', 
'step_type', 
'store_exception_context', 
'table', 
'text', 
'type'] 

La chaîne étape est tout simplement test.name

+0

que diriez-vous de la chaîne étape Comment accéder que – teddybear123

+0

@ teddybear123 Mise à jour la réponse –