0

爲了避免使用我們的分析標記進行迴歸,我想使用PhantomJS自動測試Adobe Analytics標記。將自定義變量傳遞給PhantomJS onResourceRequested

要做到這一點我希望能夠測試兩件事情:

  • 在HTML源代碼的某些JS變量聲明存在
  • 比較HTML源代碼中的變量與到Adobe Analytics(分析)取得Ajax調用和確保他們在HTML源

爲例變量我想同樣的值間諜上:

<script>s.events="event27";</script> 

這裏是JS測試腳本我有這麼遠:

"use strict"; 

if (!String.prototype.contains) { 
    String.prototype.contains = function (arg) { 
     return !!~this.indexOf(arg); 
    }; 
} 

var page = require('webpage').create(); 

page.onResourceRequested = function(request) { 
    var obj = JSON.stringify(request, undefined, 4); 

    var needle = '2o7'; 
    var url = request.url; 

    if (url.contains(needle)) { 
     var calledUrl = decodeURI(decodeURIComponent(url)); 
     console.log(calledUrl); 
    } 
}; 

page.onResourceReceived = function(response) { 
    var jsonResponse = JSON.stringify(response, undefined, 4); 
}; 

page.open('http://www.domain.com/page.html', function() { 
    var s_account = page.evaluate(function() { 
     return window.s_account; 
    }); 

    var s_events = page.evaluate(function() { 
     return window.s.events; 
    }); 

    phantom.exit(); 
}); 

我希望能夠通s_account和s_events變量的onResourceRequested功能,這樣我可以在這2間斷言平等變量和_GET參數在calledUrl var。

但我不知道如何去做。任何幫助,將不勝感激!

回答

-1

我找到了解決問題的方法。

我實際上是從onResourceRequested回調中得到window.s_account的內容:

page.onResourceRequested = function(request) { 
    var obj = JSON.stringify(request, undefined, 4); 

    var needle = '2o7'; 
    var url = request.url; 

    var result = false; 


    if (url.contains(needle)) { 
     var s_account = page.evaluate(function() { 
      return window.s_account; 
     }); 

     result = true; 
     var calledUrl = decodeURI(decodeURIComponent(url)); 

     console.log(s_account); 
    } 
}; 

它可能不是最優雅的方式然而做到這一點,但它的工作原理。