Javascript 从phantomjs控制异步退出

Javascript 从phantomjs控制异步退出,javascript,testing,asynchronous,phantomjs,Javascript,Testing,Asynchronous,Phantomjs,我正在尝试用phantomjs做一些测试。。。基本上我想: 在我的Web服务器上打开一个页面 页面初始化后(加载所有页面js) 从phantomjs调用页面js并测试结果 退出幻影 然而,phantomjs似乎很难注意到页面何时加载 我可以使用phantomjs在窗口或其他地方设置一个“test”变量,以便页面js可以检查它,然后在完成后调用回调。问题是回调只能是一个页面回调,所以它不能做任何页面不能做的事情 这对苔丝来说可能没问题,但最后一步是不可能的 我想到了这个: page.onCon

我正在尝试用phantomjs做一些测试。。。基本上我想:

  • 在我的Web服务器上打开一个页面
  • 页面初始化后(加载所有页面js)
  • 从phantomjs调用页面js并测试结果
  • 退出幻影
然而,phantomjs似乎很难注意到页面何时加载

我可以使用phantomjs在窗口或其他地方设置一个“test”变量,以便页面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(),然后控制台监视器可以杀死phantom。不过,这似乎有点老套。有人有更好的方法吗?

免责声明:这是未经测试的代码

您可以附加到网页对象的onLoadFinished回调。这将在PhantomJS的范围内执行,因此您将拥有所有可用的变量

这样的东西应该足够了:

page.onLoadFinished = function(){
   page.evaluate(function() {
//call your testing code here
   });

phantom.exit();
}

显然,这里没有得到任何东西,所以我制作了一个Web服务器在phantomjs中运行,它工作得更好:你不能附加到网页对象的onLoadFinished回调?我甚至没有想到这一点。您应该回答:-)您可以查看Casperjs,这使得这类事情非常简单: