钥匙要点
-
Phantomcss是一个Node.js工具,可执行视觉回归测试,这是一种自动测试的形式,该形式检查网页元素是否按预期出现。它通过获取页面或特定元素的屏幕截图,将其与存储的基线图像进行比较,并在屏幕截图不匹配的情况下创建差异的图像。
- >。 Phantomcss建立在多个组件上,包括用于与Phantomcss或Slimerjs浏览器,Phantomjs 2或Slimerjs相互作用的Casperjs,作为无头浏览器,并相似于比较图像的js。 使用phantomcss,以node.js脚本的形式创建了一个测试套件。测试套件打开所需的页面,进行屏幕截图,并将它们与上一步的图像进行比较。如果对网站进行更改,则可以再次进行测试以将新屏幕截图与原始屏幕截图进行比较。
- 如果在测试中检测到视觉变化,则幻影突出显示了已更改的区域。要接受这些更改,可以使用其他–rebase参数运行测试命令。这用新的基线图像替换为新的基线图像。
- 如果您在职业生涯中做出了任何认真的发展,那么当您意识到开发过程中自动测试的重要性时,您可能已经达到了一点。根据您的经验,这种认识可能会在一个大爆发中袭击您,或者随着时间的流逝,它可能会轻轻地来到您身边,但最终将成为第二天性。自动测试有多种形式,从单元测试,测试隔离的代码,集成和功能测试时,当您测试系统的不同部分如何共同行为时。本文一般不是关于自动测试的概述。它是关于一个特定的和一个相对较新的利基,称为
- 视觉回归测试
。 >视觉回归测试采用另一种方法来测试网页。该测试不仅要确保DOM中存在某些元素或文本值,还可以打开页面,并检查此特定块是否看起来完全像您希望它到
>。只是为了确保您获得了差异,让我给您一个例子。想象一下,您希望您的网站向访问者打招呼:<span><span><span><div>>Hello, %username%!<span><span></span></span> </div></span>></span></span>为了确保它有效,您可以(并且应该)单位测试产生消息的代码,以检查其插入正确的名称。您还可以使用硒或量角器编写功能测试,以查看该元素是否实际上在页面上使用正确的文本存在。但这还不够。我们不仅要测试文本是正确生成的或出现在DOM中的文本,还要确保整个元素
>正确,即确保元素不会被显示:无或有人并没有意外地覆盖文本的颜色。有许多工具可以做到这一点,但是今天我们将特别研究一个选项 - 幻影。
什么是phantomcss?Phantomcss是一种进行视觉回归测试的node.js工具。它是开源的,由赫德尔的家伙开发。 Phantomcss允许您运行一个无头浏览器,打开页面并在页面上进行整个页面或特定元素的屏幕截图。此屏幕截图将作为基线图像存储,以供将来参考。每当您更改网站上的任何内容时,都可以再次运行Phantomcss。它将采用另一个屏幕截图并将其与原始图像进行比较。如果找不到差异,则测试将通过。但是,如果屏幕截图不匹配,测试将失败,并且将创建差异的新图像供您查看。这种方法使该工具非常适合测试CSS的更改。
Phantomcss构建在几个关键组件的顶部:casperjs - 一种与Phantomcss或Slimerjs浏览器进行交互的工具。它允许您打开页面并执行用户交互,例如单击按钮或输入值。此外,Casperjs提供了自己的测试框架和捕获页面屏幕截图的能力。
Phantomjs 2或Slimerjs - 两个不同的无头浏览器,两种无头浏览器都可以与Phantomcs一起使用。无头浏览器就像没有用户界面的普通浏览器一样。
- >类似于js - 用于比较图像的库。
- phantomcss可以与phantomjs和slimerjs一起使用,但是在本文中,我们将使用phantomjs。 让我们旋转
- >让我们设置一个小型测试项目,以了解如何在实践中使用此工具。为此,我们将需要一个网页来测试和一个简单的node.js Web服务器,以便Casperjs可以打开页面。
设置测试项目
>创建一个带有一些示例内容的index.html文件:
>>要安装Web服务器,初始化NPM项目并安装HTTP-Server软件包。
运行服务器,让我们定义一个简单的NPM脚本。只需将以下脚本部分添加到package.json
<span><span><span><div>>Hello, %username%!<span><span></span></span> </div></span>></span></span>
>现在您可以从项目文件夹中运行NPM启动,并且索引页将在默认地址http://127.0.0.1:8080上访问。启动服务器,现在让它运行。我们将在一段时间内需要它。
>安装Phantomcss
>安装Phantomcss很容易,您需要做的就是在项目中添加一些依赖项:
<span><span> </span><span><span><span>></span> </span> <span><span><span>></span> </span> <span><span><span><style>></style></span><span> </span></span><span><span> <span><span>.tag</span> { </span></span></span><span><span> <span>color: #fff; </span></span></span><span><span> <span>font-size: 30px; </span></span></span><span><span> <span>border-radius: 10px; </span></span></span><span><span> <span>padding: 10px; </span></span></span><span><span> <span>margin: 10px; </span></span></span><span><span> <span>width: 500px; </span></span></span><span><span> <span>} </span></span></span><span><span> </span></span><span><span> <span><span>.tag-first</span> { </span></span></span><span><span> <span>background: lightcoral; </span></span></span><span><span> <span>} </span></span></span><span><span> </span></span><span><span> <span><span>.tag-second</span> { </span></span></span><span><span> <span>background: lightskyblue; </span></span></span><span><span> <span>} </span></span></span><span><span> </span><span><span></span>></span> </span> <span><span><span></span>></span> </span> <span><span><span>></span> </span> <span><span><span><div> class<span>="tag tag-first"</span>>The moving finger writes, and having written moves on.<span><span></span></span> </div></span>></span> </span> <span><span><span><div> class<span>="tag tag-second"</span>>Nor all thy piety nor all thy wit, can cancel half a line of it.<span><span></span></span> </div></span>></span> </span> <span><span><span></span>></span> </span><span><span><span></span>></span></span></span></span></span></span></span>创建一个测试套件
>现在,我们拥有建立第一个测试套件所需的一切。 Phantomcss测试套件是以Node.js脚本的形式创建的,您可以在其中打开网站所需的页面,进行屏幕截图并将其与上一步中的图像进行比较。我们从基于Phantomcss本身的演示的简单测试案例开始。
>
<span>npm init </span><span>npm install http-server --save-dev</span>测试将打开http://127.0.0.1:8080/,请屏幕截图,并将其保存在屏幕截图/body.png。
>一旦我们将测试本身就位,剩下的就是定义脚本以运行测试。让我们将以下脚本添加到package。
>您现在可以通过执行以下命令来运行它:
><span>"scripts": { </span> <span>"start": "http-server" </span><span>},</span>
您将看到的输出应该看起来像这样:
<span>npm install phantomcss casperjs phantomjs-prebuilt --save-dev</span>
>由于您是第一次进行测试,因此它将创建一个新的基线屏幕截图,并且不会进行任何比较。继续前进,窥视屏幕截图文件夹。您应该看到这样的图像:
<span>var phantomcss = require('phantomcss'); </span> <span>// start a casper test </span>casper<span>.test.begin('Tags', function(test) { </span> phantomcss<span>.init({ </span> <span>rebase: casper.cli.get('rebase') </span> <span>}); </span> <span>// open page </span> casper<span>.start('http://127.0.0.1:8080/'); </span> <span>// set your preferred view port size </span> casper<span>.viewport(1024, 768); </span> casper<span>.then(function() { </span> <span>// take the screenshot of the whole body element and save it under "body.png". The first parameter is actually a CSS selector </span> phantomcss<span>.screenshot('body', 'body'); </span> <span>}); </span> casper<span>.then(function now_check_the_screenshots() { </span> <span>// compare screenshots </span> phantomcss<span>.compareAll(); </span> <span>}); </span> <span>// run tests </span> casper<span>.run(function() { </span> <span>console.log('\nTHE END.'); </span> casper<span>.test.done(); </span> <span>}); </span><span>});</span>
>这是您的网站应该如何外观的黄金标准,并且测试的未来执行将将其结果与此图像进行比较。

如果您再次运行相同的测试命令,它将报告所有测试已成功传递:
>这是可以预期的,因为我们没有在网站上更改任何内容。让我们打破一些东西,再次重新进行测试。例如,尝试在index.html中更改一些样式,将块的大小降低到400px。现在让我们再次进行测试,看看会发生什么:
>
<span>"test": "casperjs test test.js"</span>在这里发生了一些重要的事情。首先,Phantomcss报告说,由于屏幕截图Body_0.png的不匹配,测试失败了。不匹配为11.41%。其次,当前版本和上一个版本之间的差异保存在“故障文件夹”中。如果打开它,您会看到这样的屏幕截图:
>
<span>npm test</span>屏幕截图方便地突出了已更改的区域,因此很容易发现差异。
接受更改
>现在已经强调了差异,我们该怎么做才能接受更改?我们应该以某种方式能够告诉该工具我们要坚持使用块的宽度减小,并接受当前视图作为新标准。为此,您可以使用附加的 - rebase参数运行test命令:
<span><span><span><div>>Hello, %username%!<span><span></span></span> </div></span>></span></span>请注意两个双重破折号。这是NPM将参数传递到基础命令的方式。因此,以下命令将导致casperjs test.js -rebase。既然我们已经接受了更改,则将以新的基线图像替换为新的图像。
>
进一步>现在您已经掌握了基础知识,您可以开始考虑将此工具集成到自己的工作流程中。我不会详细介绍它,因为它特定于项目,但是这里有一些问题要思考:
>您是否要针对真实网站或某种样式指南进行测试,其中只有单独的UI元素?
- >
- 您的网站有动态内容吗?如果是,那么内容的更改将导致测试破裂。为了避免这种情况,您需要设置一个具有静态上下文的网站的单独版本,以对其进行测试。
- 您是否要将屏幕截图添加到版本控件中?是的,你应该。
- 您要拍摄整个页面的屏幕截图还是单独的元素? >
- >使用此工具,您现在可以通过自动测试来介绍网站的视觉方面。有了您的单元和功能测试,这种新策略将填补您的测试前沿中的狭窄空白。即使您仍然是测试的新手 - 这是一个很好的起点!
经常询问的问题(常见问题解答)有关使用幻影测试的视觉回归测试
什么是phantomcss,它如何工作?
>
>我可以将phantomcss与其他测试框架一起使用吗?与其他测试框架(如摩卡咖啡,茉莉花和Qunit)一起使用。它也可以与詹金斯(Jenkins)和特拉维斯(Travis)CI等连续集成系统进行集成。将使用phantomcss进行视觉回归测试的优点是什么?phantomcss为视觉回归测试提供了几种优势。它可以自动捕获和比较屏幕截图的过程,从而节省了大量时间。它还提供了一个视觉报告,使得可以轻松发现基线图像和测试图像之间的差异。此外,Phantomcss支持响应式设计测试,使开发人员可以在不同的屏幕尺寸上测试其网页。>我如何在phantomcss中调试测试?>我可以自定义phantomcss中的比较过程吗?>> phantomcss的视觉回归测试的替代方法是什么?>有几种替代方法可用于phantomcss for Phantomcss for视觉回归测试,包括Backstopjs,Wraith和Gemini。这些工具提供了与幻影相似的功能,但根据您的特定需求,它们可能具有不同的优势和劣势。
>我如何在phantomcss中调试测试? > phantomcss的视觉回归测试的替代方法是什么?>我可以自定义phantomcss中的比较过程吗?
>有几种替代方法可用于phantomcss for Phantomcss for视觉回归测试,包括Backstopjs,Wraith和Gemini。这些工具提供了与幻影相似的功能,但根据您的特定需求,它们可能具有不同的优势和劣势。
以上是幻影的视觉回归测试的详细内容。更多信息请关注PHP中文网其他相关文章!

具有CSS的自定义光标很棒,但是我们可以将JavaScript提升到一个新的水平。使用JavaScript,我们可以在光标状态之间过渡,将动态文本放置在光标中,应用复杂的动画并应用过滤器。

互动CSS动画和元素相互启动的元素在2025年似乎更合理。虽然不需要在CSS中实施乒乓球,但CSS的灵活性和力量的增加,可以怀疑Lee&Aver Lee&Aver Lee有一天将是一场

有关利用CSS背景滤波器属性来样式用户界面的提示和技巧。您将学习如何在多个元素之间进行背景过滤器,并将它们与其他CSS图形效果集成在一起以创建精心设计的设计。

好吧,事实证明,SVG的内置动画功能从未按计划进行弃用。当然,CSS和JavaScript具有承载负载的能力,但是很高兴知道Smil并没有像以前那样死在水中

是的,让#039;跳上文字包装:Safari Technology Preview In Pretty Landing!但是请注意,它与在铬浏览器中的工作方式不同。

此CSS-tricks更新了,重点介绍了年鉴,最近的播客出现,新的CSS计数器指南以及增加了几位新作者,这些新作者贡献了有价值的内容。

在大多数情况下,人们展示了@Apply的@Apply功能,其中包括Tailwind的单个property实用程序之一(会改变单个CSS声明)。当以这种方式展示时,@Apply听起来似乎很有希望。如此明显


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

SublimeText3 英文版
推荐:为Win版本,支持代码提示!