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

无法从Excel单元格提取图片至测试,遇JpegImageFile无len()错误求助

问题描述

需要将Excel单元格中的图片提取为测试附件,避免硬编码路径,直接从工作表获取。当前提取G7单元格图片的代码如下:

def getImageAttachment():
    ExcelBook = openpyxl.load_workbook("F:\MSL Automation Framework\msl.test\TestDataExcel.xlsx")
    sheet = ExcelBook.active
    image_loader = SheetImageLoader(sheet)
    image = image_loader.get('G7')
    test_ImageAttachment = [{sheet['G6'].value: image}]
    return test_ImageAttachment

运行测试时抛出错误:TypeError: object of type 'JpegImageFile' has no len()

解决方案

错误原因是测试框架无法直接处理SheetImageLoader.get()返回的PIL JpegImageFile对象,框架期望接收字节流或文件路径这类可计算长度的对象,因此需要转换格式。

方法1:转换为字节流(推荐,无临时文件)

将PIL图片对象转为字节流后传递给框架,代码修改如下:

from io import BytesIO
from openpyxl import load_workbook
from openpyxl_image_loader import SheetImageLoader

def getImageAttachment():
    # 使用原始字符串避免路径转义问题
    ExcelBook = load_workbook(r"F:\MSL Automation Framework\msl.test\TestDataExcel.xlsx")
    sheet = ExcelBook.active
    image_loader = SheetImageLoader(sheet)
    image = image_loader.get('G7')
    
    # 将图片转为JPEG格式字节流
    img_byte_stream = BytesIO()
    image.save(img_byte_stream, format='JPEG')
    img_byte_stream.seek(0)  # 重置流指针到起始位置
    
    test_ImageAttachment = [{sheet['G6'].value: img_byte_stream}]
    return test_ImageAttachment

方法2:保存为临时文件

如果框架仅支持文件路径,可创建临时文件存储图片,代码如下:

import tempfile
from openpyxl import load_workbook
from openpyxl_image_loader import SheetImageLoader

def getImageAttachment():
    ExcelBook = load_workbook(r"F:\MSL Automation Framework\msl.test\TestDataExcel.xlsx")
    sheet = ExcelBook.active
    image_loader = SheetImageLoader(sheet)
    image = image_loader.get('G7')
    
    # 创建临时JPG文件,程序退出时自动删除
    with tempfile.NamedTemporaryFile(suffix='.jpg', delete=True) as tmp_file:
        image.save(tmp_file, format='JPEG')
        tmp_file_path = tmp_file.name
    
    test_ImageAttachment = [{sheet['G6'].value: tmp_file_path}]
    return test_ImageAttachment

注意:若需要在测试结束后保留文件,可将delete=True改为delete=False,但需手动清理临时文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 00:09:22