我正试图在测试失败时截取屏幕截图
我做过一些有用的东西,但是有一个问题: 它会截取每次失败后发生的测试 - 例如: 1.测试通过:没有截图 2.测试失败:截图 3.测试通过:截图 - 所以在第一次错误之后,所有测试都会获得截图
我知道这是_resultForDoCleanups方法的问题,在我的情况下不能用_outcomeForDoCleanups.success替换,因为我使用的是python 2.7,而不是3。
我的代码:
def tearDown(self):
if self._test_has_failed():
if not os.path.exists(SCREEN_DUMP_LOCATION):
os.makedirs(SCREEN_DUMP_LOCATION)
for ix, handle in enumerate(self.driver.window_handles):
self._windowid = ix
self.driver.switch_to.window(handle)
self.take_screenshot()
self.driver.quit()
def _test_has_failed(self):
for method, error in self._resultForDoCleanups.errors:
if error:
return True
return False
def _get_filename(self):
timestamp = datetime.now().isoformat().replace(':', '.')[:19]
return "{folder}/{classname}.{method}-window{windowid}-{timestamp}".format(
folder=SCREEN_DUMP_LOCATION,
classname=self.__class__.__name__,
method=self._testMethodName,
windowid=self._windowid,
timestamp=timestamp
)
def take_screenshot(self):
filename = self._get_filename() + ".png"
print "\n{method} SCREENSHOT AND HTML:\n".format(
method=self._testMethodName)
print 'screenshot:', filename
self.driver.get_screenshot_as_file(filename)
答案 0 :(得分:2)
您的代码非常接近您希望发生的事情。
此代码使用@jonrsharpe的评论
def tally(self):
return len(self._resultForDoCleanups.errors) + len(self._resultForDoCleanups.failures)
def setUp(self):
self.errors_and_failures = self.tally()
def tearDown(self):
if self.tally() > self.errors_and_failures:
# Take a screenshot
在每种测试方法开始时,我们都会发现有多少错误和失败。当我们到达tearDown方法时,我们的测试方法已经执行,我们将知道是否有错误。 tally方法将比我们在测试方法之前设置的self.errors_and_failures变量高1。
希望这就是你要找的东西。