Robot Framework调用列表值报错:List '${element}'无索引0项
解决Robot Framework读取CSV后索引访问报错问题
问题场景
在PyCharm中使用Robot Framework结合Selenium Library时,先从表格获取ProductID存入列表并写入CSV,代码如下:
${list}= Create List ${ProductID} ${data}= create list ${list} Append To Csv File ProductID.csv ${data}
CSV写入成功后,在另一脚本读取该CSV并调用,代码如下:
${rows} = get element count xpath=//*[@id="YearlyReport"]/tbody/tr sleep 2 log to console Total Rows ${rows} ${ProductID}= Read Csv File To List ProductID.csv FOR ${element} IN @{ProductID} Log To Console ${element}[0] FOR ${rowno} IN RANGE 1 ${rows}+1 Input Text xpath=//input[@placeholder='Search ...'] ${element}[0] sleep 5 ${Details} = Get Text xpath=//*[@id="YearlyReport"]/tbody/tr[${rowno}]/td[10] log to console In Search Stage of ${Details}[0] is ${Details}
运行时出现报错:List '${element}' has no item in index 0,将索引改为1后仍报同类错误。
报错原因
- 写入CSV时的冗余嵌套:原代码中先用
Create List把单个${ProductID}包装成列表,又用create list再套一层,导致CSV中存储的是嵌套列表格式的文本,而非单一ProductID值。 - 读取后的数据类型误解:
Read Csv File To List返回的每个${element}是字符串(CSV存储的是纯文本),但代码里把它当成列表去用索引[0]访问,自然会触发索引不存在的错误。
解决方案
1. 修正CSV写入逻辑,去掉多余列表嵌套
如果是写入单个ProductID,直接写入即可:
Append To Csv File ProductID.csv ${ProductID}
如果是批量写入多个ProductID,直接使用已有的列表(无需二次嵌套):
# 假设${ProductID_List}是包含多个ProductID的列表 Append To Csv File ProductID.csv @{ProductID_List}
2. 修改读取后的遍历代码,直接使用字符串
读取后的${element}就是单个ProductID字符串,不需要索引访问:
${ProductID}= Read Csv File To List ProductID.csv FOR ${element} IN @{ProductID} Log To Console ${element} FOR ${rowno} IN RANGE 1 ${rows}+1 Input Text xpath=//input[@placeholder='Search ...'] ${element} sleep 5 ${Details} = Get Text xpath=//*[@id="YearlyReport"]/tbody/tr[${rowno}]/td[10] log to console In Search Stage of ${element} is ${Details}
3. (可选)处理带表头的CSV
如果CSV包含表头,建议用Read Csv File返回字典列表来精准获取值:
${csv_data}= Read Csv File ProductID.csv FOR ${row} IN @{csv_data} ${product_id}= Get From Dictionary ${row} ProductID # 假设表头字段为ProductID Input Text xpath=//input[@placeholder='Search ...'] ${product_id}
内容的提问来源于stack exchange,提问作者ADS KUL
相关产品推荐
相关产品推荐

