You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C#和Selenium查看并验证Blob链接的XLSX报告文件?

Selenium验证Blob链接下载的XLSX文件内容的最佳方法

针对你遇到的场景(点击带blob:协议的下载按钮生成XLSX报告,需在回归测试中验证内容),推荐以下两种实用方案:

方案一:直接获取Blob内容(无需本地下载)

这种方法跳过浏览器下载流程,直接通过JS提取Blob对应的二进制数据,效率更高,尤其适合自动化测试和CI环境。

步骤:

  1. 用Selenium执行JavaScript,获取Blob的Base64编码数据
  2. 将Base64转成字节流,用Excel处理库读取内容

Python代码示例:

from selenium import webdriver
import base64
import pandas as pd
from io import BytesIO
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("你的目标页面URL")

# 执行JS获取Blob的Base64数据
js_script = """
const downloadLink = document.querySelector('a.n-pad.btn[download="test-report"]');
const xhr = new XMLHttpRequest();
xhr.open('GET', downloadLink.href, false);
xhr.responseType = 'blob';
xhr.send();
const reader = new FileReader();
reader.readAsDataURL(xhr.response);
while(reader.readyState !== 2) {} // 等待读取完成
return reader.result;
"""
base64_str = driver.execute_script(js_script).split(',')[1]  # 去掉dataURL前缀

# 转成字节流并读取XLSX
byte_data = base64.b64decode(base64_str)
df = pd.read_excel(BytesIO(byte_data))

# 示例验证:检查第一行第一列的值
assert df.iloc[0, 0] == "预期内容"

driver.quit()

方案二:模拟浏览器下载后读取文件

如果需要完全模拟用户的下载操作(验证下载流程完整性),可以配置浏览器的下载路径,待文件下载完成后读取内容。

步骤:

  1. 配置浏览器的下载偏好(指定目录、关闭弹窗)
  2. 点击下载按钮,等待文件下载完成
  3. 读取文件并验证内容,最后清理文件

Python代码示例(Chrome):

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
import os
import time

# 配置下载目录
download_dir = os.path.abspath("./test_downloads")
os.makedirs(download_dir, exist_ok=True)

# 配置Chrome选项
chrome_options = Options()
chrome_options.add_experimental_option("prefs", {
    "download.default_directory": download_dir,
    "download.prompt_for_download": False,
    "download.directory_upgrade": True,
    "safebrowsing.enabled": True
})

driver = webdriver.Chrome(options=chrome_options)
driver.get("你的目标页面URL")

# 点击保存按钮
driver.find_element(By.CSS_SELECTOR, 'a.n-pad.btn[download="test-report"]').click()

# 等待文件下载完成(含文件写入完成判断)
file_path = os.path.join(download_dir, "test-report.xlsx")
start_time = time.time()
while True:
    if os.path.exists(file_path):
        # 检查文件大小是否稳定(避免文件未写完)
        current_size = os.path.getsize(file_path)
        time.sleep(1)
        if current_size == os.path.getsize(file_path):
            break
    if time.time() - start_time > 30:
        raise TimeoutError("文件下载超时")

# 读取并验证内容
df = pd.read_excel(file_path)
assert df.loc[0, "目标列名"] == "预期值"

# 清理文件和浏览器
os.remove(file_path)
driver.quit()

方案对比

  • 方案一:无需处理本地文件,避免路径权限、文件残留等问题,执行速度快,适合大部分自动化测试场景。
  • 方案二:完全模拟用户操作,可验证下载流程的完整性(如文件名是否正确、下载是否触发),但依赖本地环境,CI环境需额外配置。

注意事项

  • blob: URL是临时的,页面刷新后会失效,需在页面未刷新时执行获取逻辑。
  • 处理XLSX需安装对应依赖:pandas、openpyxl(或xlrd),可通过pip install pandas openpyxl安装。

内容的提问来源于stack exchange,提问作者Kev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 04:42:54