如图,当一个页面上有多个checkbox,有时候需要根据条件来选择我们需要的checkbox。
上面假设我们需要挑选出符合条件的公司名称,我们先获得所有的公司名,get webelements 获取元素列表,get text获取文本,用一个for循环遍历可获得所有的公司名。
然后和我们的条件(这个条件就是读取.txt中的数据,这个读取的数据我们用列表来保存)比较,如果符合要求,去勾选checkbox;所有我们还要去把所有的checkbox的定位元素拿到,但是,我们知道的,在robotframework中使用两个for循环嵌套是比较不好弄得,不如selenium中可以直接使用python语言就可以搞定。这里我们找到了一个关键字:list should not contain value,列表中不应该包含值,就是查看列表中是否和数值匹配,再用一个关键字,run keyword and return status来返回执行语句的状态,True or False.
这样子,循环遍历公司名字,符合条件的就勾选,不符合就不勾选,直到遍历完页面所有的公司名,为了保证页面的元素可见性,在for循环中判断一次就就滚动下屏幕。
我们设置两个初始变量:${count},${页面滚动值},${count}没遍历一次就加1,这个${count}传给定位的checkbox作为元素列表索引取值。
大概思路就是这样子,放个我做的案列:
@{webelements} get webelements jquery=ul.results_list_box>li>a
${黑名单公司} 返回读取的列表内容
${滑动页面数值} set variable ${0} #设置页面滚动值
${count} set variable ${0} #设置计数(作为checkbo元素列表的取值索引)
sleep 2
: FOR ${ele} IN @{webelements} #遍历元素
\ ${页面的公司名称} get text ${ele} #获取公司名
\ sleep 0.5 \ #该处需要加点延时,不然易返回none
\ ${status} run keyword and return status list should not contain value ${黑名单公司} ${页面的公司名称}
\ run keyword if '${status}'=='True' 点击元素 jquery=div#searchlist>ul>li>input:eq(${count})
\ 上下滚动 ${滑动页面数值}
\ ${count} evaluate ${count}+1
\ ${滑动页面数值} evaluate ${滑动页面数值}+40