news 2026/9/3 2:59:23

unet image Face Fusion自动化测试?Selenium模拟操作脚本

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
unet image Face Fusion自动化测试?Selenium模拟操作脚本

unet image Face Fusion自动化测试?Selenium模拟操作脚本

1. 引言

随着AI图像处理技术的快速发展,人脸融合(Face Fusion)作为一项重要的视觉合成技术,广泛应用于娱乐、社交、数字人等领域。基于阿里达摩院ModelScope平台的unet image Face Fusion模型,开发者“科哥”构建了一套功能完整的WebUI系统,支持本地化部署与二次开发。

然而,在实际项目中,仅靠手动测试难以保证系统的稳定性与可重复性。为了提升测试效率、降低人工成本,本文将介绍如何使用Seleniumunet image Face Fusion WebUI进行自动化测试,实现从页面加载、参数配置到结果验证的全流程自动化。

本文属于实践应用类文章,聚焦于工程落地细节,提供完整可运行的Python脚本,并结合真实界面结构分析关键实现逻辑。


2. 技术方案选型

2.1 为什么选择Selenium?

在多种浏览器自动化工具中(如Puppeteer、Playwright、Cypress),我们最终选择Selenium + ChromeDriver,原因如下:

对比维度Selenium优势
浏览器兼容性支持Chrome、Firefox等主流浏览器
社区生态Python生态成熟,文档丰富
本地Web应用适配可绕过HTTPS限制,适合localhost调试
元素定位能力支持XPath、CSS Selector等多种方式,精准控制UI组件

此外,该WebUI为Gradio框架生成的标准HTML页面,DOM结构清晰,非常适合通过Selenium进行自动化交互。

2.2 自动化目标定义

本次自动化测试的核心目标包括:

  • ✅ 自动启动并访问本地Web服务
  • ✅ 上传源图像和目标图像
  • ✅ 配置基础与高级参数
  • ✅ 触发“开始融合”按钮
  • ✅ 等待并验证结果输出
  • ✅ 截图保存执行过程(用于回归测试)

3. 实现步骤详解

3.1 环境准备

确保以下环境已正确安装:

# 安装Selenium库 pip install selenium # 下载ChromeDriver(版本需匹配Chrome) # 地址:https://chromedriver.chromium.org/ # 启动Face Fusion服务 /bin/bash /root/run.sh

注意:请确认服务已在http://localhost:7860正常运行。


3.2 核心代码实现

以下是完整的Selenium自动化脚本,包含详细注释说明每一步操作逻辑。

from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.chrome.service import Service import time import os # 配置路径 CHROME_DRIVER_PATH = "/usr/local/bin/chromedriver" # 修改为你的chromedriver路径 TARGET_URL = "http://localhost:7860" IMAGE_DIR = "/root/test_images/" # 存放测试图片的目录 def setup_driver(): """初始化Chrome浏览器驱动""" options = webdriver.ChromeOptions() options.add_argument("--no-sandbox") options.add_argument("--disable-dev-shm-usage") options.add_argument("--disable-gpu") options.add_argument("--window-size=1920,1080") options.add_argument("--disable-blink-features=AutomationControlled") options.add_experimental_option("useAutomationExtension", False) options.add_experimental_option("excludeSwitches", ["enable-automation"]) service = Service(executable_path=CHROME_DRIVER_PATH) driver = webdriver.Chrome(service=service, options=options) # 移除navigator.webdriver标记,防止被检测 driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", { "source": "Object.defineProperty(navigator, 'webdriver', {get: () => false});" }) return driver def wait_for_element(driver, by, value, timeout=20): """等待元素出现""" return WebDriverWait(driver, timeout).until( EC.presence_of_element_located((by, value)) ) def upload_image(driver, input_label, image_path): """上传图片文件""" # 查找对应标签的上传区域(Gradio中通常为input[type='file']) file_input = driver.find_element(By.XPATH, f"//label[contains(text(), '{input_label}')]/following::input[@type='file']") file_input.send_keys(image_path) def main(): driver = setup_driver() try: print("正在打开Face Fusion WebUI...") driver.get(TARGET_URL) # 等待页面加载完成(等待标题出现) wait_for_element(driver, By.XPATH, "//h1[contains(text(), 'Face Fusion')]", 30) print("页面加载成功") # 上传目标图像(被融合图) target_img = os.path.join(IMAGE_DIR, "target.jpg") upload_image(driver, "目标图像", target_img) print("已上传目标图像") # 上传源图像(提供人脸) source_img = os.path.join(IMAGE_DIR, "source.jpg") upload_image(driver, "源图像", source_img) print("已上传源图像") # 调整融合比例(滑块) ratio_slider = wait_for_element(driver, By.XPATH, "//label[contains(text(), '融合比例')]/following::input[@type='range']", 15) driver.execute_script("arguments[0].value = '0.7'; arguments[0].dispatchEvent(new Event('input'));", ratio_slider) print("设置融合比例为0.7") # 展开高级参数 advanced_btn = driver.find_element(By.XPATH, "//button[contains(text(), '高级参数')]") if "collapsed" in advanced_btn.get_attribute("class"): advanced_btn.click() time.sleep(1) # 设置融合模式为 blend mode_dropdown = driver.find_element(By.XPATH, "//label[contains(text(), '融合模式')]/following::button") mode_dropdown.click() time.sleep(0.5) blend_option = driver.find_element(By.XPATH, "//li[contains(text(), 'blend')]") blend_option.click() # 设置输出分辨率为1024x1024 resolution_dropdown = driver.find_element(By.XPATH, "//label[contains(text(), '输出分辨率')]/following::button") resolution_dropdown.click() time.sleep(0.5) res_option = driver.find_element(By.XPATH, "//li[contains(text(), '1024x1024')]") res_option.click() # 调整皮肤平滑度 smooth_slider = driver.find_element(By.XPATH, "//label[contains(text(), '皮肤平滑')]/following::input[@type='range']") driver.execute_script("arguments[0].value = '0.5'; arguments[0].dispatchEvent(new Event('input'));", smooth_slider) # 点击“开始融合”按钮 start_button = driver.find_element(By.XPATH, "//button[contains(text(), '开始融合')]") driver.execute_script("arguments[0].scrollIntoView();", start_button) time.sleep(1) start_button.click() print("已点击【开始融合】,等待处理...") # 等待结果图片出现(右侧展示区) result_image = wait_for_element(driver, By.XPATH, "//div[@id='result-image']//img", 60) print("融合成功!结果已生成") # 截图保存当前状态 timestamp = int(time.time()) screenshot_path = f"/root/outputs/automation_test_{timestamp}.png" driver.save_screenshot(screenshot_path) print(f"截图已保存至: {screenshot_path}") # 可选:提取结果图片URL并下载 img_src = result_image.get_attribute("src") print(f"结果图片地址: {img_src}") time.sleep(3) # 停留查看 except Exception as e: print(f"自动化执行失败: {str(e)}") driver.save_screenshot("/root/outputs/error.png") raise finally: driver.quit() print("浏览器已关闭") if __name__ == "__main__": main()

3.3 关键点解析

3.3.1 文件上传机制

Gradio的上传控件本质是隐藏的<input type="file">元素。通过XPath定位其父级<label>文本内容,再查找后续的input节点即可完成绑定。

driver.find_element(By.XPATH, "//label[contains(text(), '目标图像')]/following::input[@type='file']")
3.3.2 滑块值修改

HTML原生滑块无法直接.send_keys(),必须通过JavaScript注入事件触发:

driver.execute_script("arguments[0].value = '0.7'; arguments[0].dispatchEvent(new Event('input'));", slider)

否则前端不会更新状态。

3.3.3 下拉菜单选择

Gradio下拉框为自定义组件,需先点击展开,再选择对应<li>项:

dropdown.click() option = driver.find_element(By.XPATH, "//li[contains(text(), 'blend')]") option.click()
3.3.4 防反爬策略

部分现代前端框架会检测navigator.webdriver标识,导致页面拒绝响应。需添加CSDP指令移除该标志:

driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", { "source": "Object.defineProperty(navigator, 'webdriver', {get: () => false});" })

4. 实践问题与优化

4.1 常见问题及解决方案

问题现象原因分析解决方法
页面未加载完成就报错网络或服务延迟使用WebDriverWait显式等待关键元素
找不到元素XPath不准确或动态ID使用contains(text())模糊匹配
滑块无反应缺少事件触发必须用JS设置值并派发input事件
图片上传失败路径错误或格式不支持检查文件是否存在,建议使用JPG/PNG

4.2 性能优化建议

  • 复用Driver实例:避免频繁启停浏览器,可用于多轮测试。
  • 异步等待替代sleep:减少不必要的等待时间。
  • 日志记录增强:加入logging模块便于排查。
  • 集成CI/CD:可结合GitHub Actions定时测试服务可用性。

5. 应用场景扩展

本脚本不仅可用于功能测试,还可拓展至以下场景:

  • 🔁回归测试:每次代码更新后自动验证核心流程
  • 📊性能压测:批量提交任务统计平均处理时间
  • 🤖无人值守运维:定时检查服务是否正常响应
  • 🧪参数遍历测试:自动尝试不同参数组合评估效果

例如,可封装为参数化测试函数:

def run_fusion_test(source, target, ratio, mode): # 动态传参执行一次融合 pass

6. 总结

本文围绕unet image Face Fusion WebUI的实际应用场景,介绍了如何利用Selenium实现全自动化的端到端测试流程。通过完整的Python脚本示例,展示了从环境搭建、元素定位、参数配置到结果验证的全过程。

核心收获总结如下:

  1. 工程可行性高:Gradio生成的界面结构规范,易于自动化;
  2. 关键技术掌握:解决了滑块控制、下拉选择、防检测等典型难题;
  3. 可落地性强:脚本可直接集成进持续集成系统,提升开发效率;
  4. 扩展空间大:支持多图批量测试、异常监控、报告生成等进阶功能。

未来可进一步结合OpenCV对输出图像质量做自动化评分,实现真正意义上的“闭环测试”。

7. 最佳实践建议

  1. 保持测试图片多样性:覆盖正脸、侧脸、光照差异等场景;
  2. 定期更新ChromeDriver:避免版本不兼容导致失败;
  3. 保留截图日志:便于后期回溯问题;
  4. 设置超时保护:防止因服务卡死导致资源占用。

获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 1:33:56

告别环境配置烦恼,YOLOv9镜像让检测项目秒落地

告别环境配置烦恼&#xff0c;YOLOv9镜像让检测项目秒落地 在工业质检、智能安防和自动驾驶等实时视觉任务中&#xff0c;目标检测模型的部署效率往往决定了整个项目的推进节奏。传统方式下&#xff0c;开发者需要花费大量时间配置CUDA、PyTorch、OpenCV等依赖&#xff0c;处理…

作者头像 李华
网站建设 2026/9/2 22:08:03

LPIPS和FID指标优秀!lama定量评估表现亮眼

LPIPS和FID指标优秀&#xff01;lama定量评估表现亮眼 1. 引言&#xff1a;图像修复的挑战与LaMa的突破 在图像编辑、内容创作和数字资产管理等领域&#xff0c;图像修复&#xff08;Image Inpainting&#xff09;是一项关键任务。其目标是根据图像中未受损区域的内容&#x…

作者头像 李华
网站建设 2026/9/2 22:53:01

混元翻译模型1.8B版:质量保障策略

混元翻译模型1.8B版&#xff1a;质量保障策略 1. 技术背景与问题提出 随着全球化进程的加速&#xff0c;跨语言沟通需求持续增长&#xff0c;高质量、低延迟的机器翻译系统成为智能应用的核心组件。传统大型翻译模型虽然具备较强的语言理解能力&#xff0c;但其高资源消耗和推…

作者头像 李华
网站建设 2026/9/2 22:56:18

Qwen轻量级模型解析:与传统BERT模型的对比优势

Qwen轻量级模型解析&#xff1a;与传统BERT模型的对比优势 1. 引言 1.1 技术背景与行业痛点 在当前自然语言处理&#xff08;NLP&#xff09;的实际应用中&#xff0c;情感分析和对话系统常被用于客服、用户反馈监控、智能助手等场景。传统方案通常采用“专用模型堆叠”架构…

作者头像 李华
网站建设 2026/9/3 2:15:39

为什么推荐科哥UNet镜像?三大优势新手一看就懂

为什么推荐科哥UNet镜像&#xff1f;三大优势新手一看就懂 1. 引言&#xff1a;图像抠图的痛点与自动化需求 在数字内容创作、电商上架、广告设计等场景中&#xff0c;图像抠图是一项高频且耗时的基础任务。传统方式依赖Photoshop等专业工具&#xff0c;不仅学习成本高&#…

作者头像 李华
网站建设 2026/8/26 21:00:30

DeepSeek-R1-Distill-Qwen-1.5B实战:快速搭建智能问答系统

DeepSeek-R1-Distill-Qwen-1.5B实战&#xff1a;快速搭建智能问答系统 1. 引言 1.1 业务场景描述 在当前AI模型日益庞大的趋势下&#xff0c;如何在资源受限的设备上部署高效、轻量且具备较强推理能力的大语言模型&#xff0c;成为边缘计算、嵌入式设备和本地化服务的重要挑…

作者头像 李华