Robot Framework 4.0 用索引取${}多值变量返回字符的异常问题咨询
问题产生的根本原因
变量定义的类型逻辑偏差
你在*** Variables ***表中定义的${BROWSERSIZE}是标量变量,这类变量的赋值规则是:不管后面跟多少个空格分隔的单元格内容,最终都会被拼接成一个带空格的单字符串。也就是说你实际存储的变量值不是包含两个独立数值的列表,而是完整的字符串"1400 900"。
索引操作的作用结果匹配
你使用的[n]索引语法,会直接对变量实际存储的值做类型适配的访问:
- 字符串本身是由单个字符组成的可迭代序列,对
"1400 900"这个字符串做[0]索引,取到的就是第一个字符"1";做[1]索引,取到的就是第二个字符"4",和你看到的运行输出完全一致。 - 官方手册中提到的索引可拆分独立值的场景,前提是变量实际存储的是列表、元组这类可索引的序列结构,而非拼接生成的字符串。
正确实现视口大小取值的方案
- 方案1:改用列表变量存储多值,直接适配索引语法
在变量表中将变量前缀从$改为@,空格分隔的两个值会自动成为列表的独立元素:
此时原日志语句运行后,就会正常输出:*** Variables *** @{BROWSERSIZE} 1400 900Size: 1400 900, Width:1400 Height:900 - 方案2:如果必须用标量变量存储,需要显式构造列表结构
不要靠多空格直接给标量变量赋值,可在测试流程中通过Create List关键字生成真实的列表对象再赋值给标量:*** Variables *** ${BROWSERSIZE} ${None} *** Test Cases *** 初始化视口大小变量 ${BROWSERSIZE}= Create List 1400 900 Log To Console Size: ${BROWSERSIZE}, Width:${BROWSERSIZE}[0] Height:${BROWSERSIZE}[1]
通用避坑提示
很多新手容易混淆两种变量的赋值规则:
- 带
@前缀的列表变量,每个空格分隔的单元格会自动成为列表的独立元素 - 带
$前缀的标量变量,多个空格分隔的单元格只会被拼接为单个字符串,不会自动转换为列表结构
内容的提问来源于stack exchange,提问作者Detlef Schneider
相关产品推荐
相关产品推荐

