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

Python3使用Selenium Webdriver如何正确断言img标签src属性并定位logo.svg?

问题根因

原代码存在两处逻辑错误:

  1. 直接将字符串logo.svg与find_element返回的WebElement对象做相等判断,二者类型完全不同,该判断逻辑本身不成立。
  2. 使用XPath全匹配@src='../logo.svg'的方式定位元素极易失效:浏览器渲染页面时会自动将相对路径转换为绝对路径,或是实际部署后路径前缀发生变化,都会导致XPath匹配不到元素,触发NoSuchElementException。

正确实现步骤

步骤1:稳定定位目标img元素

优先使用id、class、alt等稳定属性定位,无上述属性时可使用contains做src的模糊匹配,Selenium 4推荐使用By类统一管理定位方式:

from selenium.webdriver.common.by import By

# 模糊匹配src中包含logo.svg的img元素
img_element = context.driver.find_element(By.XPATH, "//img[contains(@src, 'logo.svg')]")

如果页面是异步渲染,建议增加显式等待,避免元素未加载完成导致的定位失败:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 最多等待10秒,直到目标元素出现
wait = WebDriverWait(context.driver, 10)
img_element = wait.until(EC.presence_of_element_located((By.XPATH, "//img[contains(@src, 'logo.svg')]")))

步骤2:比对元素属性验证文件名称

通过WebElement的get_attribute方法获取实际的src属性值,再和目标文件名做比对:

import os

expected_file = "logo.svg"
# 获取元素实际src属性
actual_src = img_element.get_attribute("src")
# 提取src中的文件名部分
actual_file = os.path.basename(actual_src)

# 执行断言
assert actual_file == expected_file, f"图片文件不匹配,预期:{expected_file},实际:{actual_file}"

优化建议

  • 若logo元素有alt属性(比如值为公司logo),优先用该属性定位,稳定性远高于src匹配://img[@alt="公司logo"]
  • 若需要严格校验完整路径,可先拼接站点域名前缀再做全量比对,避免相对路径转换带来的匹配问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:36:03