Esempio n. 1
0
    def _take_and_transfer_screenshot(self, renderer, imageName, screenshotNumber, testClassName, testRunName,
                                      displayNumber, useSystemCompositorForScreenshot, minWidth, minHeight):

        splittedImageName = os.path.splitext(imageName)
        localScreenshotName = "{}_{}_{}{}".format(splittedImageName[0], screenshotNumber, self.name, splittedImageName[1])
        targetScreenshotName = "{}{}_{:04d}_{}".format(self.fixed_screenshot_prefix, self.unique_screenshot_prefix, self.target_screenshot_counter, localScreenshotName)
        self.target_screenshot_counter += 1

        # trigger screenshot(s)
        if useSystemCompositorForScreenshot:
            self._take_system_compositor_screenshot(targetScreenshotName, renderer)
        else:
            self._take_renderer_screenshot(targetScreenshotName, renderer, displayNumber)

        resultDirForTest = helper.get_result_dir_subdirectory(self.resultDir, testClassName+"/"+testRunName)

        self._transfer_screenshots(targetScreenshotName, self.tmpDir, resultDirForTest)

        localScreenshotFile = os.path.join(resultDirForTest, localScreenshotName)
        log.info("Store remote {} as local {}".format(targetScreenshotName, localScreenshotFile))
        os.rename(os.path.join(resultDirForTest, targetScreenshotName), localScreenshotFile)

        #check image size
        pilImage = Image.open(localScreenshotFile)
        if (pilImage.size[0] < minWidth) or (pilImage.size[1] < minHeight):
            log.errorAndAssert("Screenshot too small: expected >= {}x{}, got {}x{}".format(minWidth, minHeight, pilImage.size[0], pilImage.size[1]))

        return localScreenshotFile
Esempio n. 2
0
    def _take_and_transfer_screenshot(self, renderer, imageName, testClassName,
                                      testRunName, displayNumber,
                                      useSystemCompositorForScreenshot,
                                      minWidth, minHeight):
        splittedImageName = os.path.splitext(
            imageName)  # split into image name and extension
        extendedImageNameBase = splittedImageName[
            0] + '_' + self.name  # extend name with target name to make unique
        # Add wildcard, because the system compositor outputs multiple screenshots. One for each screen, that has the suffix "_<number>".
        screenshotNamePattern = extendedImageNameBase + "*.*"

        #delete old screenshot files on target if existing
        self._delete_files_on_target(screenshotNamePattern, self.tmpDir)

        # trigger screenshot(s)
        if useSystemCompositorForScreenshot:
            self._take_system_compositor_screenshot(
                extendedImageNameBase + ".png", renderer)
        else:
            self._take_renderer_screenshot(extendedImageNameBase + ".bmp",
                                           renderer, displayNumber)

        resultDirForTest = helper.get_result_dir_subdirectory(
            self.resultDir, testClassName + "/" + testRunName)

        self._transfer_screenshots(screenshotNamePattern, self.tmpDir,
                                   resultDirForTest)

        # delete screenshots on target (disk space is precious these days)
        self._delete_files_on_target(screenshotNamePattern, self.tmpDir)

        #search for suitable screenshot
        suitableScreenshotFound = False
        screenShotFiles = glob.glob(
            os.path.normcase(resultDirForTest + '/' + screenshotNamePattern))
        folderForUnusedPath = helper.get_result_dir_subdirectory(
            resultDirForTest, 'unused_screenshots')

        if len(screenShotFiles) == 0:
            log.errorAndAssert("No screenshot files found")

        for f in screenShotFiles:
            if not suitableScreenshotFound:
                #check image size
                pilImage = Image.open(f)
                if (pilImage.size[0] >= minWidth) and (pilImage.size[1] >=
                                                       minHeight):
                    suitableScreenshotFound = True
                    returnFile = f
                else:
                    #too small, move to unused folder
                    log.info(
                        "Screenshot too small: expected >= {}x{}, got {}x{}".
                        format(minWidth, minHeight, pilImage.size[0],
                               pilImage.size[1]))
                    os.rename(
                        f,
                        os.path.join(folderForUnusedPath, os.path.basename(f)))
            else:
                #suitable file already found, move others to unused foler
                os.rename(
                    f, os.path.join(folderForUnusedPath, os.path.basename(f)))

        if not suitableScreenshotFound:
            log.errorAndAssert("No suitable screenshot found")

        return returnFile