【问题标题】:Playwright throws aPIRequestContext.get: Request context disposedPlaywright 抛出 aAPIRequestContext.get:请求上下文已处理
【发布时间】:2021-12-31 03:26:24
【问题描述】:

我有一个需要循环 json 文件的代码。但是它会引发此错误:

aPIRequestContext.get: Request context disposed.

我也不知道为什么。 这是我实现它的方式:

当我尝试将代码块放在 base.loopJsonData 之外时,它可以工作......但在里面时不行。我尝试打印 json 详细信息并且得到了输出,但在使用 request.get() 时却没有

这是 loopJsonData

public loopJsonData(json, data, callback) {
        const inputData = this.loadJSONData(json, data);
        inputData.forEach((val, i) => {
            ((item, index) => {
                callback(item, index, inputData);
            })(val, i);
        });
    }

这是 loadJSONData

public loadJSONData(path: string, testData: string) {
        let jsonPath;

        this.contentPath = join(process.cwd(), path);
        this.contentPath = normalizer.normalize(this.contentPath);
        this.contentPath = JSON.parse(fs.readFileSync(this.contentPath, "utf8"));
        jsonPath = this.contentPath;
        return jsonPath[testData];
    }

【问题讨论】:

    标签: javascript typescript api automated-tests playwright


    【解决方案1】:

    loopJsonData 采用异步函数,但内部没有await(只是为每个数据项inputData.forEach((val, i) => { 同步调用它)。使用这种方法,内部request.get() 将在测试方法完成后运行,并且它将与处理request 的拆除逻辑竞争(基本上你在调用request.dispose() 之后调用request.get())。

    要解决此问题,您应确保等待所有异步回调,如下所示:

    async loopJsonData(json, data, callback) {
        const inputData = this.loadJSONData(json, data);
        const promises = [];
        inputData.forEach((val, i) => {
            promises.push(callback(val, i, inputData));
        });
        await Promise.all(promises);
    }
    

    【讨论】:

    • 我对 javascript 世界还很陌生,从这个和承诺中学到了很多东西。非常感谢您的解释!
    猜你喜欢
    • 1970-01-01
    • 2019-02-17
    • 2017-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多