# Debugging failing tests

When a GUI-related test fails, it can sometimes be hard to find out where the culprit lies. To aid with debugging such tests, the `qtbot` fixture allows to stop the current test and to take screenshots of widgets.

## Stopping the current test

By calling `pytestqt.qtbot.QtBot.stop()`, the current test gets interrupted. After closing all visible windows, `qtbot` attempts to restore the previous state and the test continues to run.

Note

If you use Xvfb or the `offscreen` platform plugin (e.g. via `QT_QPA_PLATFORM=offscreen`), remember to disable those to see the windows. With the pytest-xvfb plugin, this is possible by passing `--no-xvfb` to pytest.

## Taking screenshots

Added in version 4.1.

Via `pytestqt.qtbot.QtBot.screenshot()`, a screenshot of a given widget can be taken. That screenshot is then saved into a temporary directory provided by pytest. For example, this test:

    from pytestqt.qt_compat import qt_api

    def test_screenshot(qtbot):
        button = qt_api.QtWidgets.QPushButton()
        button.setText("Hello World!")
        qtbot.add_widget(button)
        path = qtbot.screenshot(button)
        assert False, path  # show the path and fail the test

would result in the following file at a location like `/tmp/pytest-of-USER/pytest-N/test_screenshot0/screenshot_QPushButton.png`:

The filename is generated based on the following parts:

- `screenshot`

- The class of the widget (e.g. `QWidget` or `QPushButton`)

- The widget’s `objectName()`, if set

- The given `suffix`, if passed

- A counter to make the filename unique, if another screenshot already exists