如何在 e2e 测试期间访问和操作结构指令

How to access and manipulate structural directives during an e2e test

背景: 我希望能够为给定路线排列 Angular2 屏幕的所有可能配置,并使用量角器对其进行截图:http://www.protractortest.org/#/debugging

问题:在 e2e 测试期间,我似乎找不到访问指令(例如 ng-if)的方法。

可能的解决方案:这是一个关于我如何访问路由器以导航到特定路线的示例:

it('should get the router', () => {
browser.executeScript(() => {
  const ng = window['ng'];
  const root = document.getElementsByTagName('app-root')[0];
  const router = ng.probe(root)
    .injector.get(ng.coreTokens.Router);
  const routes = router.config;
  ...
  ...
  return [];
}).then(ret=> console.log(ret));
});

想法:

如有任何关于我的问题的提示,我将不胜感激。

您可以按照以下方式进行:

html

<button id="find">Find ngIf directives and show all</button>

脚本

var findComments = function(el) {
    var arr = [];
    for(var i = 0; i < el.childNodes.length; i++) {
        var node = el.childNodes[i];
        if(node.nodeType === 8) {
            arr.push(node);
        } else {
            arr.push.apply(arr, findComments(node));
        }
    }
    return arr;
};


function findNgIfDirectives() {
  var commentNodes = findComments(document);
  const ng = window['ng'];
  commentNodes.forEach(function(node) {
    var debugNode = ng.probe(node);
    var ngIf = (debugNode.providerTokens[0]);
    var ngIfInstance = debugNode.injector.get(ngIf);

    ngIfInstance.ngIf = true;
  });

}
document.getElementById('find').addEventListener('click', findNgIfDirectives)

Plunker Example