角度量角器executeScript / executeAsyncScript:超出最大调用堆栈大小

时间:2014-05-02 14:36:27

标签: javascript angularjs scope protractor

我尝试使用以下代码检索量角器中指令的隔离范围:

protractor.executeAsyncScript(function(callback){
    var isolatedScope = angular.element("div[my-directive='data']").isolateScope();
    callback(isolatedScope);
}).then(function(isolatedScope){
    console.log("directive's isolatedScope:", isolatedScope);
});

Unfortunatley我从Chrome中收到以下错误:

UnknownError:未知错误:超出最大调用堆栈大小(会话信息:chrome = 34.0.1847.131)

2 个答案:

答案 0 :(得分:4)

您不应该将从客户端太大/太复杂的对象发送回量角器。在您的情况下,isolatedScope太大了。

这可能发生在executeAsyncScript()executeScript()evaluate()(使用executeScript())。

如果您要解决问题,可以在量角器外重现吗?然后很容易观察范围:右键单击“inspect element”,然后在开发控制台中键入$scope

如果您尝试检查范围是否有测试原因,那么您没有在正确的位置进行测试。量角器测试是高级“黑盒子”测试。你非常关心用户的观点,例如。 “按钮是否可见?”。用户永远不会与范围交互,也不应该。要测试指令内部状态,请使用DOM客户端单元测试。

答案 1 :(得分:0)

发生Maximum call stack size exceeded错误的原因之一是当函数调用自身时。例如

let next = async function () {
    await $nextButton.click();
    await next();
}

这里发生的是代码陷入无限循环并引发错误

因此,只需检查一下代码,并确保不要在偶然的地方这样做