Par exemple, j'ai ceci:
<pre>
sun<br/>
mercury <br/>
venus <br/>
earth <br/>
mars <br/>
jupiter <br/>
saturn <br/>
</pre>
et ça:
<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>
Et je veux que le second ressemble exactement au premier.
Je crois que ceux-ci ont l'air identiques, mais ma seule preuve était d'utiliser l'ancienne technique de «basculement entre les fenêtres très rapidement et le globe oculaire». (Les astronomes appellent cela un "comparateur de clignements" - https://en.wikipedia.org/wiki/Blink_comparator ). Je me suis assuré que les fenêtres étaient de la même taille et dans la même position. Mais si le HTML rendu ne tenait pas à l'écran, cela aurait pu être trop difficile.
Existe-t-il un outil ou une méthode plus définitive pour effectuer cette comparaison?
Je les ai examinés dans Chrome 77.0.3865.120 et Firefox 69.0.3.
Je sais par exemple qu'avec le navigateur Acid tests qui faisaient à l'origine partie du Web Standards Project - https://www.acidtests.org/ - le rendu parfait des pixels était la référence.
(Crédit supplémentaire: le code HTML du deuxième extrait de code est probablement adapté à mes besoins; si vous souhaitez suggérer des améliorations, celles-ci seraient les bienvenues.)
EDIT : Ma question compare deux petits exemples HTML, qui peuvent être rendus pour s'adapter à la partie visible du navigateur. Mais en général, j'aimerais connaître la réponse pour HTML qui pourrait être assez longue.
Réponses:
J'ai fait quelque chose de similaire lors du développement d'un site Web lié à CSS . J'ai dû comparer une sortie produite par un HTML / CSS avec une image qui avait été précédemment générée avec un HTML / CSS.
J'ai utilisé dom-to-image , qui convertit le code en une image encodée en base64. Je place cette image à l'intérieur d'une toile, puis j'utilise pixelmatch pour comparer les deux images.
Voici un exemple pour illustrer:
Afficher l'extrait de code
Dans le code ci-dessus, nous avons nos 2 blocs HTML et 2 toiles où nous allons peindre nos blocs. Comme vous pouvez le voir, le JS est assez simple. Le code à la fin exécute la correspondance des pixels et indique le nombre de pixels différents des deux toiles. J'ai ajouté un délai pour m'assurer que les deux images sont chargées (vous pouvez optimiser plus tard avec certains événements)
Vous pouvez également envisager une troisième toile pour mettre en évidence la différence entre les deux images et obtenir votre différence visuelle:
Afficher l'extrait de code
Modifions le contenu pour voir une différence:
Afficher l'extrait de code
Vous pouvez en savoir plus sur le fonctionnement des deux plugins que j'ai utilisés et trouver des options plus intéressantes.
Je fixe les tailles à 300x300 pour faciliter la démonstration à l'intérieur de l'extrait de code, mais vous pouvez envisager une hauteur et une largeur plus grandes.
Mise à jour
Voici un exemple plus réaliste pour comparer entre deux dispositions qui produisent le même résultat. La largeur / hauteur du canevas sera dynamique et basée sur le contenu. Je ne montrerai que la dernière toile avec la différence.
Afficher l'extrait de code
Utilisons une image différente:
Afficher l'extrait de code
la source
Voici une idée pour faire des mesures avec le DOM - je viens de remplacer le texte en question par des divs qui ont une classe qui peut être interrogée. Ensuite, vous pouvez imprimer le décalage de tous les nœuds.
D'après ce que je mesure, les retraits de caractère sont en effet les mêmes que les
.la source
caractères font également partie des TextNodes. Ceci est important, car cela signifie que votre solution ne peut pas fonctionner par programme.Imprimez les écrans des deux pages et comparez les pixels.
Vous pouvez utiliser un pilote Web comme le sélénium, rendre les deux écrans dans un fichier image (png, jpg, etc.) - le sélénium a une méthode pour le faire - et écrire un logiciel pour lire les pixels des deux pour comparer pour la similitude.
Le pilote Web est un navigateur que vous pouvez contrôler avec du code. Et vous pouvez trouver des logiciels qui comparent les images sur le Web.
Vous pouvez trouver plus d'informations dans ce lien: https://selenium.dev/
la source
Nous devons d'abord capturer des images
Méthode de capture 1
Utilisez le bouton d'écran d'impression sur votre clavier (ou tout autre outil de capture d'écran).
Pour les pages trop longues ou trop larges pour tenir à l'écran, prenez plusieurs captures d'écran de chaque page et assemblez-les dans votre éditeur de photos. Vous pouvez prendre des captures d'écran superposées d'une grande page, les placer sur des calques séparés, puis utiliser les parties qui se chevauchent pour positionner les pièces avec précision avant de fusionner les calques pour créer un composite de la page entière.
Méthode de capture 2
Vous pouvez utiliser une extension de navigateur telle que fireshot pour capturer la page entière à la fois.
Deuxièmement, nous comparons les images
Méthode 1
Ouvrez Photoshop ou allez dans Photopea .
Collez la capture d'écran dans un calque.
Répétez l'opération pour la deuxième page, en collant dans un calque différent.
Basculez la visibilité des calques et tout changement sera évident. Ou ajustez l'opacité du calque supérieur (et / ou définissez différents modes de fusion) pour comparer.
Méthode 2
Utilisez une extension de navigateur telle que pixel-perfect-2 qui permet de superposer des images semi-transparentes dans votre navigateur. Il s'agit également d'une extension utile pour vérifier l'alignement et l'espacement, car vous pouvez superposer des pages avec une image de grille dans votre navigateur.
Méthode 3
Utilisez un outil de diff image. Une recherche rapide sur Google en révélera trop pour être répertoriée ici. Il existe des plugins de diff d'image pour certains éditeurs de code, des outils de ligne de commande, des scripts Python et des services en ligne tels que diffchecker .
la source
Vous pouvez les placer les uns au-dessus des autres dans le même document avec la position: absolue; Et peut-être zoomer pour regarder de plus près.
la source
<pre>
balise en ce qui concerne les<body>
marges, je n'ai pas pu les aligner. Vos styles#a, #b { ... }
semblent le faire fonctionner correctement.Superposez les deux pages l'une sur l'autre à l'aide d'iframes. Cela devrait vous permettre de voir les différences entre les deux pages.
main.html:
doc1.html:
doc2.html
(Je soupçonne qu'il existe un moyen de le faire en utilisant des extraits de pile. N'hésitez pas à m'éclairer)
la source
Il y a des méthodes de code très complexes et intelligentes ici, alors voici une méthode simple,
Prenez une capture d'écran de l'un, ouvrez-le dans un éditeur d'image qui prend en charge la transparence Comme Photoshop,
Collez-le, puis montrez l'écran à votre manière CSS et collez-le, définissez la deuxième image collée à une opacité de 50% et voyez si elles s'alignent.
la source
Comme je l'ai vu jusqu'à présent, peu de gens mentionnent de véritables outils de test.
Il existe de nombreux outils pour votre cas d'utilisation (faisant souvent partie de cadres plus grands):
Pour ne citer que quelques prises de cette liste. Peut-être cherchez-vous et choisissez celui qui convient à votre environnement.
Si vous voulez construire une automatisation durable, ne vous fiez pas aux hacks. Il peut ne s'agir que d'AQ mais peut sérieusement enregistrer votre ** dans les futures versions.
la source