Home > Back-end >  How I can save multiple screenshots when the test is fail
How I can save multiple screenshots when the test is fail

Time:01-28

I use selenium with pytest to do some automation testing and I use a fixture to take a screenshot when it fails here is the code for the fixture:


    timestamp = datetime.now().strftime('%H-%M-%S')

    pytest_html = item.config.pluginmanager.getplugin('html')
    outcome = yield
    report = outcome.get_result()
    extra = getattr(report, 'extra', [])
    if report.when == 'call':
        # always add url to report
        # extra.append(pytest_html.extras.url('E:\Python Projects\StackField\screenshot'))
        xfail = hasattr(report, 'wasxfail')
        if (report.skipped and xfail) or (report.failed and not xfail):
            feature_request = item.funcargs["request"]
            driver = feature_request.getfixturevalue("setup")
            img_name = "name.png"
            img_path = os.path.join("E:\Python Projects\StackField\screenshot", img_name)
            driver.save_screenshot(img_path)
            # extra.append(pytest_html.extras.image('E:\Python Projects\StackField\screenshot'   timestamp   '.png'))

        if (report.skipped and xfail) or (report.failed and not xfail):
            # only add additional html on failure
            extra.append(pytest_html.extras.image(img_path))
            extra.append(pytest_html.extras.html('<div>Additional HTML</div>'))
        report.extra = extra

And I got an issue when more than 1 test is failed the same screenshot is added to the report my next question is how can I add more than 1 screenshot inside?

Thank you in advance!

CodePudding user response:

Seems you save all screenshots with the same name.

Try to set the unique name for the screenshot:

from random import randrange

if (report.skipped and xfail) or (report.failed and not xfail):
    feature_request = item.funcargs["request"]
    driver = feature_request.getfixturevalue("setup")
    timestamp = datetime.now().strftime('%H-%M-%S')
    img_name = "name"   timestamp   ".png"
    # (even better also add some random number in advance "name"   timestamp   randrange(100)   ".png"

    img_path = os.path.join("E:\Python Projects\StackField\screenshot", img_name)
    driver.save_screenshot(img_path)
    

  •  Tags:  
  • Related