如何在Protractor中使用BrowserMob Proxy?

aft*_*oon 6 protractor browsermob

我想在Protractor测试套件运行期间捕获我的应用程序发出的网络请求.

BrowserMob Proxy看起来像是一个很棒的工具.

我想使用browsermob-node node.js绑定将BrowserMob Proxy集成到Protractor中,如下所示:

  • onPrepare:创建一个新代理并启动它
  • beforeEach:开始一个新的HAR
  • afterEach:将HAR写入文件
  • onComplete:停止代理

但是,bro​​wsermob-node的API要求我将回调传递给每个方法onPrepare,onComplete并假设它们是同步的.没有done我可以通过的回调.

我的测试在Firefox,iOS和Android上运行(通过Appium).

Leo*_*cci 3

您需要对回调进行去节点化,即将它们转换为 Promises,以便 Protractor 等待它们。

替代方案 1:使用已包含的 protractor.promise

  //...
  onPrepare: function() {
    var deferred = protractor.promise.defer();
    proxy.doHAR('http://yahoo.com', function(err, data) {
      if (err) {
        deferred.reject('ERROR: ' + err);
      } else {
        deferred.fulfill(data);
      }
    });
    return deferred.promise;
  }
Run Code Online (Sandbox Code Playgroud)

替代方案 2:使用 Q 库

var Q = require('q');

  //...
  onPrepare: function() {
    var proxy_doHAR = Q.nfbind(proxy.doHAR);
    return proxy_doHAR('http://yahoo.com');
  }
Run Code Online (Sandbox Code Playgroud)

更多信息请点击这里这里

  • 谢谢。你说得完全正确。我在这里创建了一个简单的演示(使用“Q.ninvoke”):https://github.com/afternoon/protractor-browsermob-test (5认同)