【发布时间】:2012-04-12 14:57:56
【问题描述】:
我正在尝试使用 phantomjs 进行一些测试...基本上我想要:
- 在我的网络服务器上打开一个页面
- 一旦页面初始化(所有页面js已经加载完毕)
- 从phantomjs调用页面js并测试结果
- 退出 phantomjs
不过,phantomjs 似乎很难注意到页面何时加载。
我可以使用 phantomjs 在窗口或其他东西上设置一个“测试”变量,以便页面 js 可以检查它,然后在完成后调用回调。问题是回调只能是页面回调,所以不能做页面不能做的事情。
这对苔丝来说可能没问题,但最后一步是不可能的。
我想出了这个:
page.onConsoleMessage = function(msg) {
if (msg == "__quit__") {
phantom.exit();
}
else {
console.log("page: " + msg);
}
};
page.evaluate(function () {
window.quit = function () { console.log("__quit__"); };
});
所以页面代码可以调用window.quit(),然后控制台监视器可以杀死幻象。不过,这似乎有点 hacky。有人有更好的方法吗?
【问题讨论】:
-
这里显然没有得到任何东西,所以我做了一个网络服务器来在 phantomjs 中运行,它工作得更好一点:github.com/nicferrier/phantomjsel/blob/master/ghostweb.js
-
不能附加到网页对象的onLoadFinished回调? code.google.com/p/phantomjs/wiki/Interface
-
我什至没有想到这一点。你应该回答:-)
-
你可以看看 Casperjs,它让这种事情变得非常简单:casperjs.org
标签: javascript testing asynchronous phantomjs