def take_screenshot(self, filename=None, region=None) -> Image: """Take a screenshot of the current desktop. :param filename: Save screenshot to filename :param region: Region to crop screenshot to """ region = to_region(region) with mss.mss() as sct: if region is not None: image = sct.grab(region.as_tuple()) else: # mss uses the first monitor on the array as an # alias for a combined virtual monitor image = sct.grab(sct.monitors[0]) if filename is not None: filename = Path(filename).with_suffix(".png") mss.tools.to_png(image.rgb, image.size, output=filename) notebook_image(filename) self.logger.info("Saved screenshot as '%s'", filename) # Convert raw mss screenshot to Pillow Image. Might be a bit slow pillow_image = Image.frombytes("RGB", image.size, image.bgra, "raw", "BGRX") return pillow_image
def screenshot( self, locator: str = None, filename: str = "", ) -> None: # pylint: disable=C0301, W0212 """Capture page and/or element screenshot. ``locator`` if defined, take element screenshot, if not takes page screenshot ``filename`` filename for the screenshot, by default creates file `screenshot-timestamp-element/page.png` if set to `None` then file is not saved at all Example: | Screenshot | locator=//img[@alt="Google"] | filename=locator.png | # element screenshot, defined filename | Screenshot | filename=page.png | # page screenshot, defined filename | Screenshot | filename=${NONE} | # page screenshot, NO file will be created | Screenshot | | # page screenshot, default filename | Screenshot | locator=//img[@alt="Google"] | # element screenshot, default filename | Screenshot | locator=//img[@alt="Google"] | filename=${CURDIR}/subdir/loc.png # element screenshot, create dirs if not existing """ # noqa: E501 screenshot_keywords = ScreenshotKeywords(self) default_filename_prefix = f"screenshot-{int(time.time())}" def __save_base64_screenshot_to_file(base64_string, filename): path = screenshot_keywords._get_screenshot_path(filename) screenshot_keywords._create_directory(path) with open(filename, "wb") as fh: fh.write(base64.b64decode(base64_string)) self.logger.info("Screenshot saved to file: %s", filename) if locator: element = screenshot_keywords.find_element(locator) screenshot_keywords._embed_to_log_as_base64( element.screenshot_as_base64, 400) if filename is not None: filename = filename or os.path.join( os.curdir, f"{default_filename_prefix}-element.png") __save_base64_screenshot_to_file(element.screenshot_as_base64, filename) notebook.notebook_image(filename) else: screenshot_as_base64 = self.driver.get_screenshot_as_base64() screenshot_keywords._embed_to_log_as_base64( screenshot_as_base64, 800) if filename is not None: filename = filename or os.path.join( os.curdir, f"{default_filename_prefix}-page.png") __save_base64_screenshot_to_file(screenshot_as_base64, filename) notebook.notebook_image(filename)
def crop_image(self, image, region, filename=None, save_format="PNG"): """Take a screenshot of the current desktop. :param image: Image to crop :param region: Region to crop image to :param filename: Save cropped image to filename :param save_format: File format to save the image in """ region = to_region(region) image = to_image(image) image = image.crop(region.as_tuple()) image.load() if filename: image.save(filename, save_format) notebook_image(filename)
def crop_image(self, image, region, filename=None): """Crop an existing image. :param image: Image to crop :param region: Region to crop image to :param filename: Save cropped image to filename """ region = to_region(region) image = to_image(image) image = image.crop(region.as_tuple()) image.load() if filename: # Suffix isn't created automatically here image.save(Path(filename).with_suffix(".png"), "PNG") notebook_image(filename)
def take_screenshot(self, filename=None, region=None, save_format="PNG"): """Take a screenshot of the current desktop. :param filename: Save screenshot to filename :param region: Region to crop screenshot to :param save_format: File format to save the screenshot in """ region = to_region(region) if region is not None: image = ImageGrab.grab(bbox=region.as_tuple()) else: image = ImageGrab.grab() if filename is not None: filename = Path(filename).with_suffix(f".{save_format.lower()}") image.save(filename, save_format) notebook_image(filename) self.logger.info("Saved screenshot as '%s'", filename) return image