Например, у меня есть это:
<pre>
sun<br/>
mercury <br/>
venus <br/>
earth <br/>
mars <br/>
jupiter <br/>
saturn <br/>
</pre>
и это:
<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>
И я хочу, чтобы второй выглядел точно так же, как первый.
Я считаю, что они выглядят одинаково, но мое единственное доказательство было в том, чтобы использовать старую технику «переключаться между окнами очень быстро и быстро». (Астрономы называют это «компаратором мерцания» - https://en.wikipedia.org/wiki/Blink_comparator ). Я удостоверился, что окна были того же самого размера и в том же самом положении. Но если визуализированный HTML не помещался на экране, это могло бы быть слишком сложно.
Есть ли более точный инструмент или метод для этого сравнения?
Я смотрел на них как в Chrome 77.0.3865.120, так и в Firefox 69.0.3.
Например, я знаю, что с помощью тестов Acid в браузере, которые изначально были частью проекта веб-стандартов - https://www.acidtests.org/ - идеальным показателем был пиксельный рендеринг.
(Дополнительные сведения: HTML-код для второго фрагмента кода, вероятно, соответствует моим потребностям; если вы хотите предложить улучшения, это будет приветствоваться.)
РЕДАКТИРОВАТЬ : Мой вопрос сравнивает два небольших образца HTML, которые могут быть отображены в видимой части браузера. Но в целом я хотел бы знать ответ для HTML, который может быть довольно длинным.
Ответы:
Я сделал нечто подобное при разработке веб-сайта, связанного с CSS . Мне пришлось сравнить вывод, созданный HTML / CSS, с изображением, которое ранее было сгенерировано с помощью HTML / CSS.
Я использовал dom-to-image , который преобразует код в изображение в кодировке base64. Я помещаю это изображение внутрь холста, а затем использую pixelmatch для сравнения обоих изображений.
Вот пример для иллюстрации:
Показать фрагмент кода
В приведенном выше коде у нас есть 2 блока HTML и 2 полотна, где мы будем рисовать наши блоки. Как видите, JS довольно прост. Код в конце запускает сопоставление пикселей и показывает, сколько разных пикселей имеют оба полотна. Я добавил задержку, чтобы убедиться, что оба изображения загружены (вы можете оптимизировать позже с некоторыми событиями)
Вы также можете рассмотреть третий холст, чтобы подчеркнуть разницу между обоими изображениями и получить визуальную разницу:
Показать фрагмент кода
Давайте изменим содержимое, чтобы увидеть разницу:
Показать фрагмент кода
Вы можете прочитать больше о том, как работают два плагина, которые я использовал, и найти более интересные варианты.
Я устанавливаю размеры в 300x300, чтобы сделать демонстрацию внутри фрагмента легкой, но вы можете рассмотреть большую высоту и ширину.
Обновить
Вот более реалистичный пример для сравнения двух макетов, которые дают одинаковый результат. Ширина / высота холста будет динамичной и зависит от содержимого. Я покажу только последний холст с разницей.
Показать фрагмент кода
Давайте использовать другое изображение:
Показать фрагмент кода
источник
Вот идея на самом деле сделать некоторые измерения с DOM - я просто заменил рассматриваемый текст на div, у которых есть класс, к которому можно обращаться. Затем вы можете распечатать смещение всех узлов.
Из того, что я измеряю, отступы символа действительно такие же, как
.источник
символы также являются частью TextNodes. Это важно, потому что это означает, что ваше решение не может работать программно.Распечатайте экраны двух страниц и сравните пиксели.
Вы можете использовать веб-драйвер, такой как селен, визуализировать два экрана в файле изображения (png, jpg и т. Д.) - для этого у селена есть метод - и написать программное обеспечение для считывания пикселей обоих для сравнения на сходство.
Веб-драйвер - это браузер, которым вы можете управлять с помощью кода. И вы можете найти программное обеспечение, которое сравнивает изображения в Интернете.
Вы можете найти больше информации по этой ссылке: https://selenium.dev/
источник
Сначала мы должны сделать снимки
Метод захвата 1
Используйте кнопку экрана печати на клавиатуре (или другой инструмент для создания снимков экрана).
Для страниц, которые должны быть длинными или широкими, чтобы уместиться на экране, сделайте несколько скриншотов каждой страницы и соедините их вместе в вашем фоторедакторе. Вы можете делать перекрывающиеся снимки экрана большой страницы, размещать их на отдельных слоях, а затем использовать перекрывающиеся части, чтобы точно расположить части перед объединением слоев, чтобы создать составную часть всей страницы.
Метод захвата 2
Вы можете использовать расширение браузера, такое как fireshot, чтобы захватить всю страницу сразу.
Во-вторых, мы сравниваем изображения
Способ 1
Откройте фотошоп или зайдите в фотопеи .
Вставьте скриншот в слой.
Повторите для второй страницы, вставив в другой слой.
Переключите видимость слоя, и любые изменения будут очевидны. Или отрегулируйте непрозрачность верхнего слоя (и / или установите различные режимы наложения) для сравнения.
Способ 2
Используйте расширение для браузера, например pixel-perfect-2 которое позволяет накладывать полупрозрачные изображения в вашем браузере. Это полезное расширение для проверки выравнивания и интервала, поскольку вы можете наложить страницы на сетку в вашем браузере.
Способ 3
Используйте инструмент сравнения изображений. Быстрый поиск в Google покажет слишком много, чтобы перечислить здесь. Для некоторых редакторов кода, инструментов командной строки, скриптов Python и онлайн-сервисов, таких как diffchecker, существуют плагины diff для изображений .
источник
Вы можете поместить один над другим в том же документе с позиции: абсолютный; И, возможно, увеличить для более близкого взгляда.
источник
<pre>
тега в отношении<body>
полей я не смог заставить их выровнять. Ваши стили,#a, #b { ... }
кажется, заставляют это работать должным образом.Наложите две страницы друг на друга с помощью фреймов. Это должно позволить вам увидеть любые различия между двумя страницами.
main.html:
doc1.html:
doc2.html
(Я подозреваю, что есть способ сделать это с помощью фрагментов стека. Не стесняйтесь просветить меня)
источник
Здесь есть несколько действительно сложных и умных методов кода, поэтому вот простой,
Сделайте скриншот одного из них, откройте его в графическом редакторе, поддерживающем прозрачность
Вставьте его, затем возьмите скрин-шоу с вашим CSS-способом и вставьте его, установите для второго вставленного изображения непрозрачность 50% и посмотрите, совпадают ли они.
источник
Как я уже видел, мало кто упоминает о реальных инструментах тестирования.
Существует множество инструментов для вашего сценария использования (часто это часть больших фреймворков):
Чтобы назвать несколько взятых из этого списка. Может быть, посмотрите на себя и выберите тот, который подходит вашей среде.
Если вы хотите создать устойчивую автоматизацию, не полагайтесь на хаки. Это может быть «только» QA, но может серьезно сохранить ваш ** в будущих версиях.
источник