量角器ExcelJS.Click()返回ScriptTimeoutError并通过测试

时间:2019-02-20 18:26:33

标签: jasmine protractor exceljs

在我的测试中,量角器测试脚本单击按钮下载文件。

下面是代码段:

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,但没有成功。

有什么办法解决这个问题?

2 个答案:

答案 0 :(得分: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);
            });
        });
    });
})

答案 1 :(得分:0)

解决方案1“-编写异步函数并使用await。这将最终解决您的异步问题 解决方案2:-尝试如下编写return语句,这将解决诺言