private void SalvarScreenshot(string nomeDoArquivo, string diretorioDeImagens, ContextoDeTeste contexto, Action <string> salveScreenshot)
        {
            if (!ScreenshotHabilitado())
            {
                return;
            }

            if (!Directory.Exists(diretorioDeImagens))
            {
                Directory.CreateDirectory(diretorioDeImagens);
            }

            var cenarioDeTeste  = contexto.CenarioAtual;
            var screenshotCount = contexto.ObtenhaContador(cenarioDeTeste);

            ++screenshotCount;
            contexto.AtualizeContador(cenarioDeTeste, screenshotCount);

            var identificacaoDeCenario = screenshotCount.ToString("000", CultureInfo.InvariantCulture);
            var browser        = ObtenhaSufixoBrowser();
            var tipoDeAmbiente = ConfiguracaoDeTela.TipoDeAmbiente.ToString().ToLower(CultureInfo.InvariantCulture);

            var caminhoDoArquivo = Path.Combine(diretorioDeImagens, string.Format(CultureInfo.InvariantCulture, "{0}.{1}.{2}.{3}.{4}.atual.png", cenarioDeTeste, identificacaoDeCenario, nomeDoArquivo, browser, tipoDeAmbiente));

            try
            {
                salveScreenshot(caminhoDoArquivo);
            }
            catch (Exception ex)
            {
                var mensagem = string.Concat("Não foi possível salvar a imagem do caso de teste '", cenarioDeTeste, " no caminho ", caminhoDoArquivo, "'.\n", ex.Message);
                throw new ArgumentException(mensagem);
            }
        }
        /// <summary>
        /// Compare as imagens do diretório.
        /// </summary>
        /// <param name="contexto">O contexto de cenários de testes.</param>
        /// <param name="diretorioDeImagens">O diretório de imagens.</param>
        public void CompararScreenshot(ContextoDeTeste contexto, string diretorioDeImagens)
        {
            var sufixoBuscado = string.Concat(contexto.CenarioAtual, "*.atual.png");

            CompararScreenshot(diretorioDeImagens, sufixoBuscado);
        }
        /// <summary>
        /// Salva o screenshot da tela do elemento específico.
        /// O nome do arquivo segue o padrão:
        ///      "NomeDoCenarioDeTeste.Numeracao.NomeDoArquivo.Browser.Atual.png".
        /// </summary>
        /// <param name="nomeDoArquivo">O nome do arquivo.</param>
        /// <param name="diretorioDeImagens">O diretório de imagens.</param>
        /// <param name="contexto">O contexto de teste.</param>
        /// <param name="cssSeletor">O css seletor do elemento para tirar o screenshot.</param>
        public void SalvarScreenshotEspecifico(string nomeDoArquivo, string diretorioDeImagens, ContextoDeTeste contexto, string cssSeletor)
        {
            var seletor = By.CssSelector(cssSeletor);
            var el      = WebDriver.FindElement(seletor);
            var area    = new Rectangle(el.Location, el.Size);

            SalvarScreenshotEspecifico(nomeDoArquivo, diretorioDeImagens, contexto, area);
        }
        /// <summary>
        /// Salva o screenshot da tela co tamanho específico.
        /// O nome do arquivo segue o padrão:
        ///      "NomeDoCenarioDeTeste.Numeracao.NomeDoArquivo.Browser.Atual.png".
        /// </summary>
        /// <param name="nomeDoArquivo">O nome do arquivo.</param>
        /// <param name="diretorioDeImagens">O diretório de imagens.</param>
        /// <param name="contexto">O contexto de teste.</param>
        /// <param name="area">O tamanho da área a ser tirado o screenshot.</param>
        public void SalvarScreenshotEspecifico(string nomeDoArquivo, string diretorioDeImagens, ContextoDeTeste contexto, Rectangle area)
        {
            //// Ficar atento ao tamanho da imagem original com o tamanho área de clonagem.

            SalvarScreenshot(
                nomeDoArquivo,
                diretorioDeImagens,
                contexto,
                diretorio =>
            {
                var screenshot = Screenshot.GetScreenshot();

                using (var imagemOriginal = new Bitmap(new MemoryStream(screenshot.AsByteArray)))
                    using (var novaImagem = new Bitmap(area.Width, area.Height))
                        using (var grafico = Graphics.FromImage(novaImagem))
                        {
                            grafico.DrawImage(imagemOriginal, new Rectangle(0, 0, novaImagem.Width, novaImagem.Height), area, GraphicsUnit.Pixel);
                            novaImagem.Save(diretorio, ImageFormat.Png);
                        }
            });
        }
 /// <summary>
 /// Salva o screenshot da tela.
 /// O nome do arquivo segue o padrão:
 ///      "NomeDoCenarioDeTeste.Numeracao.NomeDoArquivo.Browser.Atual.png".
 /// </summary>
 /// <param name="nomeDoArquivo">O nome do arquivo.</param>
 /// <param name="diretorioDeImagens">O diretório de imagens.</param>
 /// <param name="contexto">O contexto de teste.</param>
 public void SalvarScreenshot(string nomeDoArquivo, string diretorioDeImagens, ContextoDeTeste contexto)
 {
     SalvarScreenshot(
         nomeDoArquivo,
         diretorioDeImagens,
         contexto,
         diretorio =>
     {
         var screenshot = Screenshot.GetScreenshot();
         screenshot.SaveAsFile(diretorio, ImageFormat.Png);
     });
 }