使用可选参数上传多个文件

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

此功能应该上传多个文件。我给了它 5 个文件参数,其中 2 个是强制的,最后 3 个是可选的:

export async function uploadMultipleFiles(page: Page, folder: string, file1: string, file2: string, file3?: string, file4?: string, file5?: string) {
    await page.locator('input[type="file"]').setInputFiles([path.join(folder, file1), path.join(folder, file2) ]);
}

如果调用带有3个文件参数的方法,则只会上传前两个,即与我声明的强制参数相对应的参数。

await functions.uploadMultipleFiles(page, 'tests/pictures/', 'photo1.jpg', 'photo2.jpg', 'conditions.pdf');

我明白,如果我想上传其他可选参数文件,我需要这样填写其余的参数

export async function uploadMultipleFiles(page: Page, folder: string, file1: string, file2: string, file3?: string, file4?: string, file5?: string) {
    await page.locator('input[type="file"]').setInputFiles([
        path.join(folder, file1),
        path.join(folder, file2),
        path.join(folder, file3),
        path.join(folder, file4),
        path.join(folder, file5)]);
}

但是如果我这样做,我会收到文件 3,4 和 5 的错误

Argument of type 'string | undefined' is not assignable to parameter of type 'string'.
  Type 'undefined' is not assignable to type 'string'.ts(2345)
(parameter) file3: string | undefined

只要我保持可选,我如何使用文件 3,4 和 5 参数?

typescript function parameters playwright optional-parameters
1个回答
0
投票

您可以使用扩展运算符

export async function uploadMultipleFiles(page: Page, folder: string, file1: string, file2: string, ...extraFiles: string[]) {
  const files = [path.join(folder, file1), path.join(folder, file2)];
  if (extraFiles) {
    files.push(...extraFiles.map((file) => path.join(folder, file)));
  }
  await page.locator('input[type="file"]').setInputFiles(files);
© www.soinside.com 2019 - 2024. All rights reserved.