Skip to content

robot.libraries.Screenshot

Screenshot

1
2
3
Screenshot(
    screenshot_directory=None, screenshot_module=None
)

Library for taking screenshots on the machine where tests are executed.

Taking the actual screenshot requires a suitable tool or module that may need to be installed separately. Taking screenshots also requires tests to be run with a physical or virtual display.

== Table of contents ==

%TOC%

= Supported screenshot taking tools and modules =

How screenshots are taken depends on the operating system. On OSX screenshots are taken using the built-in screencapture utility. On other operating systems you need to have one of the following tools or Python modules installed. You can specify the tool/module to use when importing the library. If no tool or module is specified, the first one found will be used.

= Where screenshots are saved =

By default screenshots are saved into the same directory where the Robot Framework log file is written. If no log is created, screenshots are saved into the directory where the XML output file is written.

It is possible to specify a custom location for screenshots using screenshot_directory argument when importing the library and using Set Screenshot Directory keyword during execution. It is also possible to save screenshots using an absolute path.

= ScreenCapLibrary =

[mihaiparvu/ScreenCapLibrary|ScreenCapLibrary] is an external Robot Framework library that can be used as an alternative, which additionally provides support for multiple formats, adjusting the quality, using GIFs and video capturing.

Configure where screenshots are saved.

If screenshot_directory is not given, screenshots are saved into same directory as the log file. The directory can also be set using Set Screenshot Directory keyword.

screenshot_module specifies the module or tool to use when using this library outside OSX. Possible values are wxPython, PyGTK, PIL and scrot, case-insensitively. If no value is given, the first module/tool found is used in that order.

Examples: | =Setting= | =Value= | =Value= | | Library | Screenshot | | | Library | Screenshot | ${TEMPDIR} | | Library | Screenshot | screenshot_module=PyGTK |

Source code in src/robot/libraries/Screenshot.py
def __init__(self, screenshot_directory=None, screenshot_module=None):
    """Configure where screenshots are saved.

    If ``screenshot_directory`` is not given, screenshots are saved into
    same directory as the log file. The directory can also be set using
    `Set Screenshot Directory` keyword.

    ``screenshot_module`` specifies the module or tool to use when using
    this library outside OSX. Possible values are ``wxPython``,
    ``PyGTK``, ``PIL`` and ``scrot``, case-insensitively. If no value is
    given, the first module/tool found is used in that order.

    Examples:
    | =Setting= |  =Value=   |  =Value=   |
    | Library   | Screenshot |            |
    | Library   | Screenshot | ${TEMPDIR} |
    | Library   | Screenshot | screenshot_module=PyGTK |
    """
    self._given_screenshot_dir = self._norm_path(screenshot_directory)
    self._screenshot_taker = ScreenshotTaker(screenshot_module)

set_screenshot_directory

set_screenshot_directory(path)

Sets the directory where screenshots are saved.

It is possible to use / as a path separator in all operating systems. Path to the old directory is returned.

The directory can also be set in importing.

Source code in src/robot/libraries/Screenshot.py
def set_screenshot_directory(self, path):
    """Sets the directory where screenshots are saved.

    It is possible to use ``/`` as a path separator in all operating
    systems. Path to the old directory is returned.

    The directory can also be set in `importing`.
    """
    path = self._norm_path(path)
    if not os.path.isdir(path):
        raise RuntimeError("Directory '%s' does not exist." % path)
    old = self._screenshot_dir
    self._given_screenshot_dir = path
    return old

take_screenshot

take_screenshot(name='screenshot', width='800px')

Takes a screenshot in JPEG format and embeds it into the log file.

Name of the file where the screenshot is stored is derived from the given name. If the name ends with extension .jpg or .jpeg, the screenshot will be stored with that exact name. Otherwise a unique name is created by adding an underscore, a running index and an extension to the name.

The name will be interpreted to be relative to the directory where the log file is written. It is also possible to use absolute paths. Using / as a path separator works in all operating systems.

width specifies the size of the screenshot in the log file.

Examples: (LOGDIR is determined automatically by the library) | Take Screenshot | | | # LOGDIR/screenshot_1.jpg (index automatically incremented) | | Take Screenshot | mypic | | # LOGDIR/mypic_1.jpg (index automatically incremented) | | Take Screenshot | ${TEMPDIR}/mypic | | # /tmp/mypic_1.jpg (index automatically incremented) | | Take Screenshot | pic.jpg | | # LOGDIR/pic.jpg (always uses this file) | | Take Screenshot | images/login.jpg | 80% | # Specify both name and width. | | Take Screenshot | width=550px | | # Specify only width. |

The path where the screenshot is saved is returned.

Source code in src/robot/libraries/Screenshot.py
def take_screenshot(self, name="screenshot", width="800px"):
    """Takes a screenshot in JPEG format and embeds it into the log file.

    Name of the file where the screenshot is stored is derived from the
    given ``name``. If the ``name`` ends with extension ``.jpg`` or
    ``.jpeg``, the screenshot will be stored with that exact name.
    Otherwise a unique name is created by adding an underscore, a running
    index and an extension to the ``name``.

    The name will be interpreted to be relative to the directory where
    the log file is written. It is also possible to use absolute paths.
    Using ``/`` as a path separator works in all operating systems.

    ``width`` specifies the size of the screenshot in the log file.

    Examples: (LOGDIR is determined automatically by the library)
    | Take Screenshot |                  |     | # LOGDIR/screenshot_1.jpg (index automatically incremented) |
    | Take Screenshot | mypic            |     | # LOGDIR/mypic_1.jpg (index automatically incremented) |
    | Take Screenshot | ${TEMPDIR}/mypic |     | # /tmp/mypic_1.jpg (index automatically incremented) |
    | Take Screenshot | pic.jpg          |     | # LOGDIR/pic.jpg (always uses this file) |
    | Take Screenshot | images/login.jpg | 80% | # Specify both name and width. |
    | Take Screenshot | width=550px      |     | # Specify only width. |

    The path where the screenshot is saved is returned.
    """
    path = self._save_screenshot(name)
    self._embed_screenshot(path, width)
    return path

take_screenshot_without_embedding

take_screenshot_without_embedding(name='screenshot')

Takes a screenshot and links it from the log file.

This keyword is otherwise identical to Take Screenshot but the saved screenshot is not embedded into the log file. The screenshot is linked so it is nevertheless easily available.

Source code in src/robot/libraries/Screenshot.py
def take_screenshot_without_embedding(self, name="screenshot"):
    """Takes a screenshot and links it from the log file.

    This keyword is otherwise identical to `Take Screenshot` but the saved
    screenshot is not embedded into the log file. The screenshot is linked
    so it is nevertheless easily available.
    """
    path = self._save_screenshot(name)
    self._link_screenshot(path)
    return path