如何在FOR循环中使用IF ELSE?Robot Framework分页点击逻辑不生效问题
问题根因
- 你只在脚本初始化阶段获取了第一页的表格长度
${row1}并固定了循环次数,跳转到下一页后没有重新获取新页面的表格行数,原有循环执行完第一页的行数后就直接终止了,自然不会处理后续页面的内容 - 你在循环内只要匹配到状态不一致就直接点下一页,但点完下一页后没有重置循环计数、也没有等待新页面加载完成就继续执行原有循环,会出现元素定位失效或者逻辑中断的问题
修复方案
调整逻辑为外层循环控制翻页,内层循环遍历当前页所有行,直到找到符合状态的行或者翻完所有页,修正后代码如下:
# 初始化翻页标记,默认有下一页 ${has_next_page} Set Variable ${True} WHILE ${has_next_page} # 每次进入新页面先重新获取当前页表格长度 ${row1} Get Length ${E.tableResultBusca} ${rows1} Set Variable ${row1}-9 ${find_target} Set Variable ${False} # 遍历当前页所有行 FOR ${i} IN RANGE 1 ${rows1} ${lineStatus} Get Text xpath://*[@id="tblOrderList"]/tbody/tr[${i}]/td[6] Log To Console Status:${lineStatus} IF '${lineStatus}' != '${statusBuscaPedidos}' # 状态不匹配,标记不需要继续遍历当前页,准备翻页 ${find_target} Set Variable ${False} BREAK ELSE # 找到匹配状态,点击打开,终止所有循环 Click Element ${b.btnAbrir} ${find_target} Set Variable ${True} ${has_next_page} Set Variable ${False} BREAK END END # 没找到目标,判断是否可以翻页 IF not ${find_target} # 先判断下一页按钮是否可点击,不可点击说明到最后一页 ${next_btn_enabled} Run Keyword And Return Status Element Is Enabled ${b.btnProximo} IF ${next_btn_enabled} Click Element ${b.btnProximo} # 等待新页面表格加载完成,避免定位失效 Wait Until Element Is Visible ${E.tableResultBusca} timeout=10 ELSE # 到最后一页也没找到,终止循环 ${has_next_page} Set Variable ${False} Log To Console 所有页面已遍历完成,未找到匹配状态的行 END END END
注意事项
- 可根据实际项目情况调整页面加载的超时时间
- 如果下一页点击后存在加载动画,可额外添加等待动画消失的逻辑,避免提前获取表格数据导致报错
内容的提问来源于stack exchange,提问作者Maria
相关产品推荐
相关产品推荐

