Gramex YAML复用配置块时变量原始值丢失引发$转义报错
Gramex YAML配置复用场景下$转义变量值丢失报错问题
复现步骤
使用如下可复用gramextest YAML脚本执行测试:
variables: my_pwd: 'Kt^$$&^dg#%o4Zwcat9knS)S#W' short_wait: 8 common_blocks: - &prod_my_pwd name: MY_password type xpath //*[@id="login-pwd"]: $my_pwd click: xpath //*[@id="login-sub"] wait: $short_wait uitest: - *prod_my_pwd
问题现象
变量my_pwd的值中包含*$符号,按照Gramex配置规则,字符串内出现$时需使用$$*进行转义避免触发值错误,该转义逻辑由gramex -> config.py -> _substitute_variable()函数实现,专门处理$转义场景的ValueError问题。
但上述脚本实际运行时仍抛出异常:
ValueError: Use $$ instead of $ in Ve5$&^fh#%o4Znjtv9kmH)H#W
对_substitute_variable()函数调试后确认执行逻辑:
- 首次调用/使用变量
$my_pwd时,替换逻辑运行正常 - 通过YAML锚点
*prod_my_pwd复用配置块时,执行失败
根因定位
第二次执行失败的直接原因:首次执行$my_pwd变量替换时,程序直接存储了_substitute_variable()返回的替换后的值(即转义符$$被处理为单个$的结果值),没有保留my_pwd带*$$*转义符的原始定义值。后续配置复用场景下读取到的变量值缺少必要转义符,_substitute_variable()检测到未转义的单个$符号时直接抛出值错误。
当前需解决配置复用场景下$my_pwd原始值丢失、无法读取变量初始定义值的问题。
预期行为
除非后续在脚本中显式修改/替换变量值,否则配置复用过程中变量不应丢失原始定义值。
环境信息
- Gramex影响版本:所有早期版本至1.80.0
内容的提问来源于stack exchange,提问作者Nivedita Deshmukh
相关产品推荐
相关产品推荐

