Exemple #1
0
        /// <inheritdoc />
        /// <summary>
        /// Takes the screenshot android device.
        /// </summary>
        /// <returns>The screenshot android device.</returns>
        /// <param name="device">Device.</param>
        public FileStreamResult TakeScreenshotAndroidDevice(Device device)
        {
            try
            {
                var screenshotFolder = Path.Combine(Directory.GetCurrentDirectory(), "Screenshot");
                Directory.CreateDirectory(screenshotFolder);
                var screenshotFilePath = Path.Combine(screenshotFolder, $"{device.Id}.png");

                // adb shell screencap -p | perl -pe 's/\x0D\x0A/\x0A/g' > screen.png
                var screenshotRet = _externalProcesses.RunShellProcess("adb",
                                                                       $" -s {device.Id} exec-out 'screencap -p' > {screenshotFilePath}; exit 0", 10000);
                _logger.Debug(screenshotRet);

                if (screenshotRet.Contains("error:"))
                {
                    return(GetDefaultMobileImage());
                }

                if (new FileInfo(screenshotFilePath).Length == 0)
                {
                    _logger.Error(
                        $"Failed to get screenshot for device: [{device.Id}]. Screenshot file [{screenshotFilePath}] has 0 size.");
                    return(GetDefaultMobileImage());
                }

                var convertedImagePath = Path.Combine(screenshotFolder, $"{device.Id}.jpg");

                ConvertImage(screenshotFilePath, convertedImagePath);

                FileStream image;

                if (System.IO.File.Exists(convertedImagePath))
                {
                    image = System.IO.File.OpenRead(convertedImagePath);
                    return(File(image, "image/jpeg"));
                }

                image = System.IO.File.OpenRead(screenshotFilePath);
                return(File(image, "image/png"));
            }
            catch (Exception e)
            {
                _logger.Error($"Failed to get screenshot for device: [{device.Id}].", e);
                return(GetDefaultMobileImage());
            }
        }