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); 
    } 
}; 

它可能不是最优雅的方式然而做到这一点,但它的工作原理。