javascript - 从 phantomjs 控制异步退出

标签 javascript testing asynchronous phantomjs

我正在尝试使用 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() ,然后控制台监视器可以杀死 phantom。不过这似乎有点老套。有没有人有更好的方法?

最佳答案

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

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

这样的东西就足够了:

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

phantom.exit();
}

关于javascript - 从 phantomjs 控制异步退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10126205/

相关文章:

javascript - 使用 Router() 参数表达

php - 将单值 getJSON 从 php 转换为 JavaScript 变量

javascript - 仅在输入输入时运行 onclick 事件

对基于 ANTLR 的树的语义分析访问者进行单元测试

android - Monkey talk 代理如何在应用程序中不修改源代码的情况下工作

mysql - 如何搭建SQL测试环境?

ruby-on-rails - 如何并行处理大多数作业但序列化一个子集?

swift - 如何在 SwiftUI 中异步请求完成后调用函数?

web-services - 玩!框架异步调用修改数据库的相同对象

javascript - onclick 事件在 IE8 中被破坏