这里提供类似于@craigds回答的方法,但支持目录,并且更好地兼容Python 3:
@property
def failureException(self):
class MyFailureException(AssertionError):
def __init__(self_, *args, **kwargs):
screenshot_dir = 'reports/screenshots'
if not os.path.exists(screenshot_dir):
os.makedirs(screenshot_dir)
self.driver.save_screenshot('{0}/{1}.png'.format(screenshot_dir, self.id()))
return super(MyFailureException, self_).__init__(*args, **kwargs)
MyFailureException.__name__ = AssertionError.__name__
return MyFailureException
这实际上是在这个
博客中发现的。
我用
argparse
进一步扩展了它:
parser.add_argument("-r", "--reports-dir", action="store", dest="dir", help="Directory to save screenshots.", default="reports")
所以目录可以通过系统变量或传递的参数来动态指定:
screenshot_dir = os.environ.get('REPORTS_DIR', self.args.dir) + '/screenshots'
如果您有额外的包装器来运行所有脚本,例如基类,那么这特别有用。
TestCase
实例传递到异常的__init__()
方法中。虽然丑陋,但至少它能够工作! - kindall