PhantomJS是无头WebKit的使用JavaScript API。它具有对各种Web标准的快速和本地支持:DOM处理,CSS选择器,JSON,Canvas和SVG。它是完整的Web堆栈,是无头网站测试,屏幕截图,页面自动化和网络监控的最佳解决方案。
我建议你,当你想要测试一些JavaScript库,并且不希望使用测试机器上安装的浏览器使用这个框架。
1.请确保您已经将QUnit的自动启动设置为false。
QUnit.config.autostart = false;
2. Download PhantomJS executable file为Windows,添加到您的项目,并设置“复制到输出目录”等于“复制,如果新”。
3.创建进程以使用2个参数运行PhantomJS.exe,这两个参数是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。我还提供完整的源代码(VS2012)到我的SkyDrive。您可以通过以下链接下载它。
PhantomJS Test project
这个项目演示如何在MSTest的运行PhantomJS。
PhantomJS Form project
该项目是在C#Windows窗体中写道PhantomJS包装。我在测试项目中使用它来测试“main.js”和“core.js”文件。
#1限制,无法捕获控制台。通常用于复杂系统的JavaScript日志输出。 –
#2限制,最大执行异步脚本为一分钟。 –