2012-07-29 70 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'); 
});