2013-10-28 58 views
3

我目前正在開發一些使用HtmlUnit的測試。它正在加載一個包含braintree.js(它們的表單加密庫)的頁面。我有一堆正在運行,但我堅持在它所謂的加密。 JS的問題是:JavaScript未在HtmlUnit中正確執行

(function() { 
     try { 
      var ab = new Uint32Array(32); 
      crypto.getRandomValues(ab); 
      sjcl.random.addEntropy(ab, 1024, "crypto.getRandomValues"); 
     } catch (e) {} 
    })(); 

是的HtmlUnit拋出:

EcmaError, ReferenceError, "'crypto' is not defined." 

我想HtmlUnit沒有不包括加密。是否有可能自己加入一個加密庫?

+1

「HtmlUnit」的含義不包括加密嗎? HtmlUnit獲取頁面。你必須將庫包含在'script'標籤中。 –

+1

謝謝,當相同的頁面在真實瀏覽器中運行時,'crypto'已解決。但是我得到了HtmlUnit中未解決的錯誤。我一直在尋找包含getRandomValues的實現,但沒有找到。 –

回答

4

根據你的評論,我必須告訴你,當涉及到JavaScript時,HtmlUnit是一個痛處。它會抱怨很多未定義的變量和未知函數等等。

真實的瀏覽器更靈活,例如:他們接受語法錯誤的JavaScript代碼。 HtmlUnit期望一切都是完美的,沒有任何一種錯誤。而且,即使你沒有錯過分號,HtmlUnit也可能會抱怨。

我的建議是:

  • 確保你的JavaScript語法正確
  • 避免複雜的庫(jQuery的似乎是適當的支持)
  • 如果您可以使用圖書館的非最小化版本的用戶值得一試
  • 儘量避免複雜的jQuery方法(例如:動態添加事件到元素)
  • 而最重要的是:嘗試切換不同的BrowserVersions。 Internet Explorer(具有諷刺意味)已被證明在解釋JavaScript時提供了最佳結果
+1

感謝您的提示大多數!我確實通過創建我自己的小crypto.getRandomValues()方法來解決這個問題。不過,現在我已經深入一些了。我可能不得不放棄這個想法,因爲劇本由布倫特裏出版 - 我無法控制。 –

+2

哦,我確實嘗試了你的想法:BrowserVersion.INTERNET_EXPLORER_10,但它不包含類型Uint32Array。似乎只有Firefox和Chrome纔有。 –