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

Robot Framework如何获取SVG内<desc>标签的description内容

问题原因

直接用Get Text获取失败的核心原因不是关键字本身不支持,是SVG元素属于独立的XML命名空间,普通的XPath、CSS定位器直接写svg、desc标签名无法正确匹配到DOM节点,根本没有选中目标元素,自然拿不到内容。

实现方案

方案1:修正定位器后用Get Text读取(推荐)

定位SVG内部元素时,XPath不要直接写标签名,要通过name()方法匹配标签名,规避命名空间导致的定位失败问题,示例用例如下:

*** Settings ***
Library    SeleniumLibrary

*** Test Cases ***
读取SVG内desc标签的JSON内容
    Open Browser    ${测试页面URL}    chrome
    # 适配SVG命名空间的desc标签定位器,如果页面有多个SVG,可在外层加父容器唯一标识缩小范围
    ${desc_locator}    Set Variable    //*[name()='svg']/*[name()='desc']
    # 读取文本内容
    ${raw_content}    Get Text    ${desc_locator}
    # 去除内容前后的换行、缩进空白
    ${clean_content}    Strip String    ${raw_content}
    # 内容为标准JSON格式,可直接转成对象做字段校验
    ${desc_obj}    Evaluate    json.loads($clean_content)    json
    # 示例校验逻辑
    Should Be Equal    ${desc_obj[0]['instance']}    aaaa:bbbb
    Should Be Equal    ${desc_obj[0]['type']}    cccc
    Close Browser

方案2:JS直接读取(兜底方案)

如果调整定位器后还是读取异常,可以直接通过JavaScript绕过Selenium定位的命名空间限制,直接拿内容,写法更简洁:

*** Settings ***
Library    SeleniumLibrary

*** Test Cases ***
JS读取SVG desc内容
    Open Browser    ${测试页面URL}    chrome
    # 直接通过JS选元素读文本,同时自动去除前后空白
    ${clean_content}    Execute Javascript    return document.querySelector('svg desc').textContent.trim()
    # 后续JSON解析、校验逻辑和方案1一致
    ${desc_obj}    Evaluate    json.loads($clean_content)    json
    Close Browser
注意事项
  • 如果页面存在多个SVG元素,定位时要给定位器加上层唯一属性,比如父容器ID,避免匹配到非目标元素:
    • XPath写法://div[@id='chart-container']/*[name()='svg']/*[name()='desc']
    • JS写法:return document.querySelector('#chart-container svg desc').textContent.trim()
  • 读取到原始内容后必须先做去空白处理,示例代码里标签的内容前后存在换行、缩进冗余字符,直接解析JSON会报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 13:18:31