为了测试Web表单在提交失败时保留所选元素,我想反转多选元素的选择(事先不知道选择是什么),存储该选择,clickAndWait
submit
按钮和assert
选项保持不变。 select
似乎不支持像xpath=//option[(not(@selected))]
那样的值,所以有一些简单的方法可以做到这一点吗?我的第一个想法是做这样的事情:
addSelection | element | *
removeSelection | element | @selected
storeSelected | element | selectedElements
不幸的是,*select*
命令似乎只能使用单个元素,并且不支持XPath,所以它并不那么容易。
答案 0 :(得分:1)
我不知道你的意思是否正确,但是:
在网站上放置的:http://www.poradnik-webmastera.com/kursy/html/formularze.php
这段代码对我有用:
addSelection | xpath=(//select[@name='jezyk'])[4] | label=Polski
addSelection | xpath=(//select[@name='jezyk'])[4] | label=Niemiecki
storeSelectedLabels | xpath=(//select[@name='jezyk'])[4] | selected
//clicking SUBMIT button
verifySelectedLabels | xpath=(//select[@name='jezyk'])[4] | ${selected}
假设所有addSelections都是随机的,“storeSelectedLabels”将存储所有选择,然后执行单击提交按钮的虚构操作,然后验证(或断言)选择。
答案 1 :(得分:0)
不,不是。抱歉,我没有明白你的意思。
无论如何,如果我想反转多选元素的选择,我会这样做(关于我之前提供的这个3元素下拉列表):
storeSelectedIndexes | xpath=(//select[@name='jezyk'])[4] | selected
removeAllSelections | xpath=(//select[@name='jezyk'])[4]
store | ${selected} | selected2
store | javascript{storedVars['selected2'].split(',').length} | selectedNo
store | 999 | selectedIndexNo0
store | 999 | selectedIndexNo1
store | 999 | selectedIndexNo2
store | -1 | loop1
while | ${loop1} < (${selectedNo} - 1)
store | javascript{storedVars.loop1++}
store | javascript{storedVars['selected2'].split(',')[storedVars['loop1']]} | selectedIndexNo${loop1}
endWhile |
store | -1 | loop2
while | ${loop2} < 2
store | javascript{storedVars.loop2++}
gotoIf | ${loop2} == ${selectedIndexNo0} || ${loop2} == ${selectedIndexNo1} || ${loop2} == ${selectedIndexNo2} | dontSelect
addSelection | xpath=(//select[@name='jezyk'])[4] | index=${loop2}
label | dontSelect
endWhile |
我认为这不是最简单的方法,但有效。
它适用于三个多选元素。
第一个循环(while - endWhile)提取选定的索引,第二个循环选择除先前选择的元素之外的所有元素。
好的,我做了一些更改,这个版本的脚本可以用于任何大小的元素(只要第一个标签的索引= 0)。您所要做的就是在第一个命令中为被检查的multiform放置id或xpath,并通过storeXpathCount或通过简单地放置一些标签来提供元素中所有标签的数量。并根据multiform的大小为“gotoIf”命令添加更多/更少的条件。
第二版脚本:
//store | put here id or xpath of your dropdown | elementID
store | xpath=(//select[@name='jezyk'])[4] | elementID
storeSelectedIndexes | ${elementID} | selected
removeAllSelections | ${elementID}
store | ${selected} | selected2
store | javascript{storedVars['selected2'].split(',').length} | selectedNo
//use custom xpath or explicitly type number of labels using simple "store" command instead of "storeXpathCount"
storeXpathCount | //div[@id='content']/div/div[2]/div[31]/div/select/option | elementSize
store | -1 | loop0
while | ${loop0} < ${elementSize}
store | javascript{storedVars.loop0++}
store | 999 | selectedIndexNo${loop0}
endWhile |
store | -1 | loop1
while | ${loop1} < (${selectedNo} - 1)
store | javascript{storedVars.loop1++}
store | javascript{storedVars['selected2'].split(',')[storedVars['loop1']]} | selectedIndexNo${loop1}
endWhile |
store | -1 | loop2
while | ${loop2} < (${elementSize} - 1)
store | javascript{storedVars.loop2++}
//depending on size of your multiform element you have to add more conditions to below "gotoIf" command. At the moment it's good for three elements (labels)
gotoIf | ${loop2} == ${selectedIndexNo0} || ${loop2} == ${selectedIndexNo1} || ${loop2} == ${selectedIndexNo2} | dontSelect
addSelection | ${elementID} | index=${loop2}
label | dontSelect
endWhile |