2012-07-29 46 views
6

问题:同步外部JS加载与zombie.js

我使用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> 

每个测试#.js文件包含了一行:console.log("TEST#.JS");

当我使这个在普通浏览器,控制台显示的预期:

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

但是当我运行它与zombie.js,我只看到一条线Inline javascript.

这是我试图解决这个问题:

  1. 使用document.createElement到脚本标签动态附加到使用document.write文档
  2. 到脚本块使用setTimeout结合图1和2添加到HTML
  3. console.log("Inline javascript"),得到测试脚本一些时间加载。

除了将所有外部JS文件中的JS代码放到一个巨大的<script>块中之外,有什么办法可以解决这个问题?

+0

你有没有考虑PhantomJS作为僵尸的替代? – Spudley 2012-07-29 21:36:51

+0

是的,我开始使用PhantomJS,但是有一些错误(例如navigator.onLine总是错误的等)让我离开它。 – laker 2012-07-30 14:36:19

回答

3

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

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