selenium-webdriver - Protractor/ Jasmine 测试抛出 “UnknownError: unknown error: Maximum call stack size exceeded”

标签 selenium-webdriver jasmine protractor browser-automation chrome-web-driver

我有一个测试,每次运行它都会抛出“ UnknownError:未知错误:超出最大调用堆栈大小。

此测试正在我的一项服务中调用写入Google云端硬盘的方法。

失败的测试是用“ui”调用我的doDrive函数,这意味着更新Drive项目。如果我更改单个字符“ui”->“ni”,即创建一个新的Drive项目,则该测试有效。被测试的代码在正常使用中可以正常工作。

it('should update a file', function() {
browser.executeAsyncScript(function(callback) {
    // get service
    var service=angular.element(document.getElementById('ngapp')).injector().get('DriveQ')
    // generate a title
    var title = 'title of file';
    // call doDrive to create a new file
    service.doDrive({t:'ui',id:'0B6B-RNrxsCu2Sll7JZTYy2aDA', item:{title:title}})
        .then(function (resp){
                    resp.originalTitle=title;
                    callback(resp)
            });
}).then(function(resp) {
    expect(resp.title).toEqual(resp.originalTitle);
});
});

我直接使用chrome webdriver,我也有browser.ignoreSynchronization = true;

最佳答案

我有同样的问题。我发现将大对象从浏览器返回到 Protractor 会导致“UnknownError:未知错误:超出最大调用堆栈大小” 错误。

您应该检查通过回调发送回的resp对象的复杂性。如果太大,请尝试发送回较少的数据。

这可能发生在executeAsyncScriptexecuteScriptevaluate(使用executeScript)中。

由OP编辑...

通过将callback(resp)更改为callback({title:resp.title})进行修复,即简化返回的对象以仅包含我要声明的那些项。

关于selenium-webdriver - Protractor/ Jasmine 测试抛出 “UnknownError: unknown error: Maximum call stack size exceeded”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25807075/

相关文章:

java - 使用 Selenium 从只读文本框中获取动态文本

javascript - 将jasmine测试结果输出到控制台

jasmine - 如何使用 Protractor 测试页面上不存在某个元素?

javascript - 带有 promise 的 Protractor 变量范围

javascript - 是否可以用变量确认提示警报?

selenium - 尝试远程运行 selenium 2 脚本

javascript - 查找多个元素

java - 如何使用 Selenium Webdriver 单击 ul 内的 li

javascript - Angular 2 JWT 单元测试

javascript - Jasmine :这是 returnValue 和 callFake 之间的唯一区别吗?