Por exemplo, eu tenho isso:
<pre>
sun<br/>
mercury <br/>
venus <br/>
earth <br/>
mars <br/>
jupiter <br/>
saturn <br/>
</pre>
e isto:
<div style="font-family:monospace">
<div style="text-indent: 0">sun</div> <br/>
<div style="text-indent: 4ch">mercury</div> <br/>
<div style="text-indent: 4ch">venus</div> <br/>
<div style="text-indent: 8ch">earth</div> <br/>
<div style="text-indent: 8ch">mars</div> <br/>
<div style="text-indent: 12ch">jupiter</div> <br/>
<div style="text-indent: 4ch">saturn</div> <br/>
</div>
E quero que o segundo seja exatamente igual ao primeiro.
Acredito que eles pareçam idênticos, mas minha única prova foi usar a velha técnica de "alternar entre janelas rapidamente e ocular". (Os astrônomos chamam isso de "comparador intermitente" - https://en.wikipedia.org/wiki/Blink_comparator ). Eu verifiquei se as janelas tinham o mesmo tamanho e na mesma posição. Mas se o HTML renderizado não couber na tela, isso pode ter sido muito difícil.
Existe uma ferramenta ou método mais definitivo para fazer essa comparação?
Eu olhei para eles no Chrome 77.0.3865.120 e no Firefox 69.0.3.
Sei, por exemplo, que com o navegador os testes Acid que originalmente faziam parte do Web Standards Project - https://www.acidtests.org/ - a renderização perfeita de pixels foi a referência.
(Crédito extra: o HTML do segundo trecho de código provavelmente é adequado para minhas necessidades; se você sugerir melhorias, isso será bem-vindo.)
Edição : Minha pergunta compara dois pequenos exemplos de HTML, que podem ser renderizados para caber na parte visível do navegador. Mas, em geral, eu gostaria de saber a resposta para HTML que pode ser bastante longa.
Respostas:
Fiz algo semelhante ao desenvolver um webiste relacionado a CSS . Eu tive que comparar uma saída produzida por um HTML / CSS com uma imagem que foi gerada anteriormente com um HTML / CSS.
Usei dom-to-image , que converte código em uma imagem codificada em base64. Coloco essa imagem dentro de uma tela e, em seguida, uso pixelmatch para comparar as duas imagens.
Aqui está um exemplo para ilustrar:
Mostrar snippet de código
No código acima, temos nossos 2 blocos HTML e 2 telas nas quais pintaremos nossos blocos. Como você pode ver, o JS é bastante simples. O código no final executa a correspondência de pixels e mostra quantos pixels diferentes as duas telas têm. Adicionei um atraso para garantir que as duas imagens sejam carregadas (você pode otimizar posteriormente com alguns eventos)
Você também pode considerar uma terceira tela para destacar a diferença entre as duas imagens e obter sua diferença visual:
Mostrar snippet de código
Vamos mudar o conteúdo para ver alguma diferença:
Mostrar snippet de código
Você pode ler mais sobre como os dois plug-ins que usei funcionam e encontrar opções mais interessantes.
Estou corrigindo os tamanhos para 300 x 300 para facilitar a demonstração dentro do snippet, mas você pode considerar uma altura e largura maiores.
Atualizar
Aqui está um exemplo mais realista para comparar entre dois layouts que produzem o mesmo resultado. A largura / altura da tela será dinâmica e baseada no conteúdo. Vou mostrar apenas a última tela com a diferença.
Mostrar snippet de código
Vamos usar uma imagem diferente:
Mostrar snippet de código
fonte
Aqui está uma idéia para realmente fazer algumas medições com o DOM - acabei de substituir o texto em questão por divs que possuem uma classe que pode ser consultada. Em seguida, você pode imprimir o deslocamento de todos os nós.
Pelo que eu medi, os recuos dos caracteres são realmente os mesmos que os
.fonte
caracteres também fazem parte dos TextNodes. Isso é importante, porque significa que sua solução não pode funcionar programaticamente.Imprima as telas das duas páginas e compare os pixels.
Você pode usar um driver de web como o selênio, renderizar as duas telas em um arquivo de imagem (png, jpg, etc) - o selênio possui um método para fazer isso - e escrever um software para ler os pixels dos dois para comparar a similaridade.
O webdriver é um navegador que você pode controlar com código. E você pode encontrar um software que compara imagens na web.
Você pode encontrar mais informações neste link: https://selenium.dev/
fonte
Primeiro temos que capturar imagens
Método de captura 1
Use o botão de tela de impressão no teclado (ou outra ferramenta de captura de tela).
Para páginas longas ou largas para caber na tela, tire várias capturas de tela de cada página e junte-as no seu editor de fotos. Você pode capturar capturas de tela sobrepostas de uma página grande, colocá-las em camadas separadas e usar as partes sobrepostas para posicionar as peças precisamente antes de mesclar camadas para criar um composto da página inteira.
Método de captura 2
Você pode usar uma extensão do navegador, como o fireshot, para capturar a página inteira de uma só vez.
Segundo, comparamos as imagens
Método 1
Abra o photoshop ou vá para o photopea .
Cole a captura de tela em uma camada.
Repita o procedimento para a segunda página, colando em uma camada diferente.
Alterne a visibilidade da camada e quaisquer alterações serão óbvias. Ou ajuste a opacidade da camada superior (e / ou defina diferentes modos de mesclagem) para comparar.
Método 2
Use uma extensão do navegador como pixel-perfect-2 que permite sobrepor imagens semitransparentes no seu navegador. Essa é uma extensão útil para verificar o alinhamento e o espaçamento também, porque você pode sobrepor páginas com uma imagem de grade no navegador.
Método 3
Use uma ferramenta de comparação de imagens. Uma rápida pesquisa no Google exibirá muitas para listar aqui. Existem plug-ins de diferenças de imagem para alguns editores de código, ferramentas de linha de comando, scripts Python e serviços online, como o diffchecker .
fonte
Você pode colocar um acima do outro no mesmo documento com a posição: absoluto; E talvez amplie para ver mais de perto.
fonte
<pre>
tag em relação às<body>
margens, não consegui que elas se alinhassem. Seus estilos#a, #b { ... }
parecem fazê-lo funcionar corretamente.Sobreponha as duas páginas umas sobre as outras usando iframes. Isso deve permitir que você veja diferenças entre as duas páginas.
main.html:
doc1.html:
doc2.html
(Suspeito que exista uma maneira de fazer isso usando os Snippets de pilha. Fique à vontade para me esclarecer)
fonte
Existem alguns métodos de código realmente complexos e inteligentes aqui, então aqui é um método simples,
Tire uma captura de tela de uma, abra-a em um editor de imagens que ofereça suporte à transparência, como o photoshop,
Cole-o e, em seguida, mostre a tela do seu jeito CSS e cole-a em definir a segunda imagem colada com uma opacidade de 50% e veja se estão alinhadas.
fonte
Como já vi até agora, poucas pessoas mencionam ferramentas de teste reais.
Existem muitas ferramentas para o seu caso de uso (geralmente parte de estruturas maiores):
Para citar alguns extraídos desta lista. Talvez procure você mesmo e escolha um que se adapte ao seu ambiente.
Se você deseja criar uma automação sustentável, não confie em hacks. Pode ser "apenas" controle de qualidade, mas pode salvar seriamente seu a ** em versões futuras.
fonte