【问题标题】:Synchronous external JS loading with zombie.js与zombie.js同步外部JS加载
【发布时间】:2026-01-25 08:05:03
【问题描述】:

问题:

我正在使用zombie.js 来测试我的客户端javascript,但我遇到了问题。 Zombie.js 不提供同步的<script> 标签执行,实际上似乎根本不执行外部 JS 文件。一项基本测试证实了这一点:

<script type="text/javascript" src="test1.js"></script>
<script type="text/javascript" src="test2.js"></script>
<script type="text/javascript" src="test3.js"></script>

<script type="text/javascript">
   console.log("Inline javascript.");
</script>

每个 test#.js 包含一行:console.log("TEST#.JS");

当我在常规浏览器中呈现它时,控制台会显示预期的:

TEST1.JS
TEST2.JS
TEST3.JS
Inline javascript.

但是当我用zombie.js 运行它时,我只看到一行Inline javascript.

这是我试图解决的问题:

  1. 使用document.createElement 将脚本标签动态附加到文档中
  2. 使用document.write将脚本块添加到html中
  3. console.log("Inline javascript") 上使用 setTimeout 并结合 1 和 2 来给测试脚本一些加载时间。

除了将我所有外部 JS 文件中的 JS 代码放入一个巨大的 &lt;script&gt; 块之外,还有什么办法可以解决这个问题?

【问题讨论】:

  • 您是否考虑过 PhantomJS 作为 Zombie 的替代品?
  • 是的,我从 PhantomJS 开始,但有几个错误(即 navigator.onLine 始终为 false 等)让我远离它。

标签: javascript zombie.js


【解决方案1】:

您确定浏览器对象的“runScripts”选项设置为 true 吗?如果没有,您可以使用以下语法:

browser.visit('... your page url ...', { runScripts: true }, function (e, b) { 
    console.log('executing callback'); 
});

【讨论】: