HOWTO: 上传与下载文件

本文将介绍如何使用 Playwright 实现文件上传和下载操作,这在 Web 自动化测试中是非常常见的场景。通过模拟用户操作,我们可以验证上传头像、提交文档或图片等功能的正常运行。

实现文件上传

在 Web 自动化测试中,上传文件是一个常见的需求。Playwright 提供了 fileChooser.setFiles() 方法来模拟用户选择文件的操作。下面是一段简单的示例代码,展示如何使用 Playwright 实现文件上传:

JavaScript
Python
const { chromium } = require('leanpro.web');

(async () => {
    const browser = await chromium.launch({ headless: false });
    const context = await browser.newContext();
    const page = await context.newPage();

    await page.goto('https://example.com'); // 替换为实际网址

    // 等待文件选择器触发
    const [fileChooser] = await Promise.all([
        page.waitForEvent('filechooser'),
        page.click('selector-for-file-upload-button') // 替换为触发文件对话框的按钮选择器
    ]);

    // 设置要上传的文件路径
    await fileChooser.setFiles('/path/to/your/file'); // 替换为实际文件路径

    // 继续其他操作
    await page.click('selector-for-submit-button'); // 替换为提交按钮的选择器

    await browser.close();
})();
from leanproWeb import WebAuto

browser = WebAuto().__enter__().chromium.launch(headless=False)
context = browser.new_context()
page = context.new_page()

page.goto('https://example.com')  # 替换为实际网址

# 等待文件选择器触发
with page.expect_file_chooser() as fc_info:
    page.click('selector-for-file-upload-button')  # 替换为触发文件对话框的按钮选择器
file_chooser = fc_info.value

# 设置要上传的文件路径
file_chooser.set_files('/path/to/your/file')  # 替换为实际文件路径

# 继续其他操作
page.click('selector-for-submit-button')  # 替换为提交按钮的选择器

browser.close()

在这个示例中:

  1. 启动浏览器并打开一个新的页面。
  2. 导航到目标网址。
  3. 等待文件选择器触发,同时点击上传按钮以打开文件选择对话框。
  4. 使用 fileChooser.setFiles('/path/to/your/file') 方法指定要上传的文件路径。
  5. 执行后续操作,如点击提交按钮。

实现文件下载

在进行自动化测试时,下载文件也是一个常见的操作。Playwright 提供了 page.on('download') 事件来处理文件下载,并且可以通过设置 acceptDownloads 选项来允许自动化脚本访问下载的文件。下面是一段示例代码,展示如何使用 Playwright 实现文件下载:

JavaScript
Python
const { chromium } = require('leanpro.web');
const path = require('path');

(async () => {
    const browser = await chromium.launch({ headless: false });
    const context = await browser.newContext({
        acceptDownloads: true  // 允许上下文中的页面进行文件下载
    });
    const page = await context.newPage();

    await page.goto('https://example.com'); // 替换为实际网址

    // 等待文件下载触发
    const [download] = await Promise.all([
        page.waitForEvent('download'),
        page.click('selector-for-download-button') // 替换为触发下载的按钮选择器
    ]);

    const filePath = path.resolve('downloads', await download.suggestedFilename());
    console.log(`Downloading file to: ${filePath}`);

    // 保存下载的文件
    await download.saveAs(filePath);

    // 继续其他操作
    ...

    await browser.close();
})();
from leanproWeb import WebAuto
import os

browser = WebAuto().__enter__().chromium.launch(headless=False)
context = browser.new_context(accept_downloads=True)
page = context.new_page()

page.goto('https://example.com')  # 替换为实际网址

# 等待文件下载触发
with page.expect_download() as download_info:
    page.click("selector-for-download-button")
download = download_info.value

# 解析下载文件的保存路径
downloads_path = os.path.join(os.getcwd(), 'downloads')
file_path = os.path.join(downloads_path, download.suggested_filename)

# 确保下载目录存在
if not os.path.exists(downloads_path):
    os.makedirs(downloads_path)

print(f'Downloading file to: {file_path}')

# 保存下载的文件到指定路径
download.save_as(file_path)

# 继续其他操作
...

browser.close()

在这个示例中:

  1. 启动浏览器,并使用 browser.newContext({ acceptDownloads: true }) 创建一个允许文件下载的上下文。
  2. 使用 page.goto() 方法导航到目标网站。
  3. 等待文件下载触发,同时点击下载按钮以开始下载文件。
  4. 将下载的文件保存到指定路径。
  5. 执行后续操作。如验证下载文件的内容或格式是否正确。

results matching ""

    No results matching ""