PhantomJS是一个带有 JavaScript API的无头 WebKit 。它具有对各种 Web 标准的快速和原生支持:DOM 处理、CSS 选择器、JSON、Canvas 和 SVG。它是完整的 Web 堆栈,是无头网站测试、屏幕捕获、页面自动化和网络监控的最佳解决方案。
![在此处输入图像描述](https://i.stack.imgur.com/381nV.png)
当你想测试一些 JavaScript 库并且不想在测试机器上使用安装的浏览器时,我建议你使用这个框架。
1.请确保您已经将 QUnit 的自动启动设置为 false。
QUnit.config.autostart = false;
2.下载适用于 Windows 的 PhantomJS 可执行文件,添加到您的项目中并将“复制到输出目录”设置为“如果较新则复制”。
3.创建进程以运行 PhantomJS.exe 与 2 个参数是 JavaScript 文件和测试页面 url。
var scriptPath = Path.GetFullPath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "../../PhantomScript/main.js"));
var pageUrl = "file:///" + Path.GetFullPath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "../../QUnitExample/qunit-demo.htm")).Replace('\\', '/');
var process = new Process
{
StartInfo =
{
UseShellExecute = false,
RedirectStandardOutput = true,
CreateNoWindow = true,
WindowStyle = ProcessWindowStyle.Hidden,
FileName = "phantomjs.exe",
Arguments = "\"" + scriptPath + "\" \"" + pageUrl + "\""
}
};
4.启动进程并检查该进程的退出代码。
process.Start();
process.WaitForExit();
Assert.AreEqual(process.ExitCode, 0);
在 JavaScript 文件中,我使用eveluateAsync访问页面上下文以运行 QUnit 测试,等待它完成并且记录测试量失败。
page.evaluateAsync(function ()
{
QUnit.done(function(response)
{
console.log('!Exit' + response.failed);
});
QUnit.start();
// If QUnit finish after 2500 ms, system will exit application with code -1.
setTimeout(function()
{
console.log('!Exit-1');
}, 2500);
});
为了处理日志,我使用以下代码通过退出代码退出进程。
var exitCodeName = '!Exit';
page.onConsoleMessage = function (msg)
{
if (msg.indexOf(exitCodeName) == 0)
{
var exitCode = parseInt(msg.substring(exitCodeName.length).trim(), 10);
phantom.exit(exitCode || 0);
}
};
PS。我还为我的 SkyDrive 提供了完整的源代码 (VS2012)。您可以在以下链接下载它。
PhantomJS 测试项目
这个项目演示了如何在 MSTest 中运行 PhantomJS。
PhantomJS 表单项目
这个项目是用 C# Windows 窗体编写的 PhantomJS 包装器。在测试项目中使用它之前,我使用它来测试“main.js”和“core.js”文件。
![在此处输入图像描述](https://i.stack.imgur.com/vNRUd.png)