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()
- XPath写法:
- 读取到原始内容后必须先做去空白处理,示例代码里
标签的内容前后存在换行、缩进冗余字符,直接解析JSON会报错。
内容的提问来源于stack exchange,提问作者Anisha
相关产品推荐
相关产品推荐

