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); }); }