news 2026/6/2 21:52:54

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/5/30 14:22:10

Paraformer-large无障碍服务:为听障人士提供实时语音转文字

Paraformer-large无障碍服务&#xff1a;为听障人士提供实时语音转文字 1. 背景与应用场景 在现代社会中&#xff0c;信息获取的平等性是构建包容性环境的重要一环。对于听障人士而言&#xff0c;实时语音转文字技术不仅是辅助工具&#xff0c;更是实现无障碍沟通的关键桥梁。…

作者头像 李华
网站建设 2026/5/29 0:29:43

Z-Image-Turbo计费系统:按次调用或订阅制的商业模式设计

Z-Image-Turbo计费系统&#xff1a;按次调用或订阅制的商业模式设计 1. 背景与技术定位 随着生成式AI在图像创作领域的广泛应用&#xff0c;文生图&#xff08;Text-to-Image&#xff09;大模型逐渐从研究走向商业化落地。阿里达摩院推出的 Z-Image-Turbo 模型基于 DiT&#…

作者头像 李华
网站建设 2026/5/30 16:13:07

Qwen3-Reranker-0.6B性能调优:batch size最佳实践

Qwen3-Reranker-0.6B性能调优&#xff1a;batch size最佳实践 1. 引言 随着大模型在信息检索、语义排序等场景中的广泛应用&#xff0c;重排序&#xff08;Reranking&#xff09;作为提升召回结果相关性的关键环节&#xff0c;其效率与准确性愈发受到关注。Qwen3-Reranker-0.…

作者头像 李华
网站建设 2026/6/2 12:16:59

YOLOv11与Faster R-CNN对比:精度与速度实测

YOLOv11与Faster R-CNN对比&#xff1a;精度与速度实测 1. 技术背景与选型意义 目标检测作为计算机视觉领域的核心任务之一&#xff0c;广泛应用于自动驾驶、智能监控、工业质检等场景。随着深度学习的发展&#xff0c;两阶段检测器&#xff08;如Faster R-CNN&#xff09;和…

作者头像 李华
网站建设 2026/5/29 1:11:38

Supertonic部署案例:银行ATM的语音操作指引系统

Supertonic部署案例&#xff1a;银行ATM的语音操作指引系统 1. 引言&#xff1a;设备端TTS在金融场景中的价值 随着智能终端设备对隐私保护和响应延迟要求的不断提升&#xff0c;传统的云端文本转语音&#xff08;TTS&#xff09;方案已难以满足高安全、低延迟的应用需求。特…

作者头像 李华
网站建设 2026/5/29 2:19:17

Qwen3-Embedding-4B如何做聚类?指令前缀配置向量生成详细步骤

Qwen3-Embedding-4B如何做聚类&#xff1f;指令前缀配置向量生成详细步骤 1. 引言&#xff1a;通义千问3-Embedding-4B——面向多语言长文本的高性能向量化模型 在当前大模型驱动的语义理解与检索系统中&#xff0c;高质量的文本嵌入&#xff08;Embedding&#xff09;模型是…

作者头像 李华