此功能应该上传多个文件。我给了它 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 参数?
您可以使用扩展运算符:
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);