仅在测试失败时创建屏幕截图

时间:2015-01-10 18:24:12

标签: python selenium selenium-webdriver

目前我有一个创建截图的功能,我在这里称之为

def tearDown(self):
    self.save_screenshot()
    self.driver.quit()

还创建了一个用于存储屏幕截图的文件夹。

我不希望在测试通过时发生这种情况。

为了不发生这种情况,我需要添加什么?

感谢所有帮助

3 个答案:

答案 0 :(得分:1)

在初始化方法中设置self.NoFailuresSnapped = 0并在调用之前或在函数内检查测试环境中当前失败次数为> self.NoFailuresSnapped,当然在返回之前再次设置它。

答案 1 :(得分:1)

以下是仅在失败时捕获屏幕截图的一种方法:

def setUp(self):
    # Assume test will fail
    self.test_failed = True

def tearDown(self):
    if self.test_failed:
        self.save_screenshot()

def test_something(self):
    # do some tests
    # Last line of the test:
    self.test_failed = False

这种方法背后的基本原理是当测试到达最后一行时,我们知道测试通过了(例如所有self.assert *都通过了)。此时,我们重置test_failed成员,该成员在setUp中设置为True。在tearDown中,我们现在可以判断测试是通过还是失败,并在适当的时候进行截屏。

答案 2 :(得分:1)

如果您的测试失败,sys.exc_info会有例外。因此,您可以将其用作测试的通过/失败结果:

if sys.exc_info()[0]:
    # 'Test Failed'
else:
    # 'Test Passed'

如果您想在失败时截取屏幕截图:

import unittest
import sys
from selenium import webdriver

class UrlTest(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Chrome()

    def test_correct_url(self):
        self.driver.get('https://google.com')
        self.assertTrue('something.com' in self.driver.current_url)

    def tearDown(self):
        if sys.exc_info()[0]:
            self.driver.get_screenshot_as_file('screenshot.png')
        self.driver.quit

if __name__ == '__main__':
    unittest.main()