如果我的测试失败,如何捕获屏幕截图?

nid*_*ids 6 python webdriver nosetests webpage-screenshot selenium-webdriver

我用nosetests运行selenium webdriver测试.我想在鼻子测试失败时捕获屏幕截图.如何通过使用webdriver,python或nosetests功能以最有效的方式完成?

Fur*_*uck 8

我的解决方案

import sys, unittest
from datetime import datetime

class TestCase(unittest.TestCase):

    def setUp(self):
        some_code

    def test_case(self):
        blah-blah-blah

    def tearDown(self):
        if sys.exc_info()[0]:  # Returns the info of exception being handled 
            fail_url = self.driver.current_url
            print fail_url
            now = datetime.now().strftime('%Y-%m-%d_%H-%M-%S-%f')
            self.driver.get_screenshot_as_file('/path/to/file/%s.png' % now) # my tests work in parallel, so I need uniqe file names
            fail_screenshot_url = 'http://debugtool/screenshots/%s.png' % now
            print fail_screenshot_url
        self.driver.quit()
Run Code Online (Sandbox Code Playgroud)

  • Nose将运行用`unittest`包编写的测试,因此这个答案没有问题 (3认同)

Ale*_*hko 5

首先,webdriver有以下命令:

driver.get_screenshot_as_file(screenshot_file_path)
Run Code Online (Sandbox Code Playgroud)

我不是鼻子专家(实际上这是我第一次看到它),但是我使用py.test框架(类似,但优于nose恕我直言).

很可能你必须为nose 创建"插件",你必须实现addFailure(test, err)"当测试失败时调用" 的钩子.

在此,addFailure(test, err)您可以从Test对象获取测试名称并生成文件的路径.

那个电话之后driver.get_screenshot_as_file(screenshot_file_path).

py.test我创建我的插件与def pytest_runtest_makereport(item, call):钩子的实现.在内部我分析call.excinfo并创建必要的屏幕截图.


Kv.*_*mar 1

在Python中你可以使用下面的代码:

driver.save_screenshot('/file/screenshot.png')
Run Code Online (Sandbox Code Playgroud)