【问题标题】:Angular protractor executeScript / executeAsyncScript: Maximum call stack size exceeded角度量角器 executeScript / executeAsyncScript:超出最大调用堆栈大小
【发布时间】:2019-06-18 03:51:28
【问题描述】:

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

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

不幸的是,我从 Chrome 收到以下错误:

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

【问题讨论】:

标签: javascript angularjs scope protractor


【解决方案1】:

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

executeAsyncScript()executeScript()evaluate()(使用 executeScript())可能会发生这种情况。

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

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

【讨论】:

    【解决方案2】:

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

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

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

    因此只需检查您的代码并确保您不会在某处意外

    【讨论】:

      猜你喜欢
      • 2016-04-20
      • 2021-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-11
      • 1970-01-01
      • 2019-07-17
      • 1970-01-01
      相关资源
      最近更新 更多