量角器ExcelJS.Click()返回ScriptTimeoutError并使测试失败

问题描述 投票:0回答:2

在我的测试中,Protractor Test脚本点击按钮下载文件。

Bellow是代码片段:

var today = new Date(),
    timeStamp = moment(today).format('MMDDYYYY');
let G = GV;
let file = './downloaded-files/StudentList'+timeStamp+'.xlsx';
let Worksheet = 'StudentList'+timeStamp+'.pdf';
let XL = require('exceljs');
let Workbook = new XL.Workbook();

let RowLength= 0;
 =======
 G.Excel_Button.click().then(function () {

    browser.driver.wait(function () {
        return fs.existsSync(file);
    }).then(function () {
        readExcelFile()
    });

function readExcelFile() {
    try {
        expect(fs.existsSync(file)).toBe(true);
        Workbook.xlsx.readFile(file).then(function () {
            var worksheet = Workbook.getWorksheet(Worksheet);
            worksheet.rowCount.then(function(RC){
                console.log('\nTotal rows in the workbook is:  ' + RC + '\n');
            });

            expect(worksheet.actualRowCount).toBe(RowLength + 1);
        });
    } catch (err) {
        reject();
    }
}

很明显,G.Excel_Button.click()会导致超时错误

 ScriptTimeoutError: script timeout: result was not received in 11 seconds

此外,日志显示以下未处理的承诺拒绝:

   (node:33984) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'rowCount' of undefined
    at C:\Protractor\specs\TestBed.js:132:23
(node:33984) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not
handled with .catch(). (rejection id: 1)
(node:33984) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
(node:33984) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.
.(node:33984) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'rowCount' of undefined
    at C:\Protractor\specs\TestBed.js:132:23
(node:33984) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not
handled with .catch(). (rejection id: 2)

我花了很多时间来解决超时错误并尝试了我能找到的所有解决方案,包括https://github.com/angular/protractor/blob/master/docs/timeouts.md,但没有成功。

有什么方法可以解决这个问题吗?

jasmine protractor exceljs
2个回答
0
投票

你能试试这个代码,看看它产生了什么吗?

var today = new Date(),
    timeStamp = moment(today).format('MMDDYYYY');
let G = GV;
let file = './downloaded-files/StudentList' + timeStamp + '.xlsx';
let Worksheet = 'StudentList' + timeStamp + '.pdf';
let XL = require('exceljs');
let Workbook = new XL.Workbook();

let RowLength = 0;
G.Excel_Button.click().then(function () {

    browser.driver.wait(function () {
        return fs.existsSync(file);
    }, 10 * 1000, `File path '${file}' did not get created within 10 seconds.`).then(function () {
        console.log('File Exists');

        Workbook.xlsx.readFile(file).then(function () {
            console.log('Reading File');

            var worksheet = Workbook.getWorksheet(Worksheet);
            worksheet.rowCount.then(function (RC) {
                console.log('\nTotal rows in the workbook is:  ' + RC + '\n');
                expect(RC).toBe(RowLength + 1);
            });
        });
    });
})

0
投票

解决方案1“ - 编写异步函数并使用await。这将明确解决您的异步问题解决方案2: - 尝试编写如下所示的return语句将解决这个问题

© www.soinside.com 2019 - 2024. All rights reserved.