我是Selenium的新人并且正在测试事宜。 我正在尝试捕获动态部分生成的超链接元素的id。 当我在selenium中点击时,点击动作被记录如下,粗体部分是动态生成的,我的页面上有很多部分,并且可以在一个站点之间有所不同(我正在测试cms)。我想抓住并点击任何一个。 这是我自那以后尝试做的事情:
storeAttribute | // button @ class onclick =“setLocation(javascript {baseUrlSelection()} ['/ checkout / cart / add / uenc /(a-zA-Z0-9) / product /(0-9)]'')“|本身份识别码
回声| $ {myid} |
clickAndWait | $ {本身份识别码[0]}
它不起作用 当点击操作记录在selenium中时,我的链接看起来像这样: 布通[@的onclick =“setLocation(”http://localhost/mydomaine/index.php/checkout/cart/add/uenc/的 aHR0cDovL2xvY2FsaG9zdC9NYWdlbnRvSGls
YWlyZURlbW9WMi9tYWdlbnRvZGVtb0hpbGFpcmVWMi9pbmRleC5waHAvY2F0ZWdvcmllMS5odG1sP19fX1NJRD1V /产品/ 1 /')“> 请帮助。
答案 0 :(得分:1)
您使用的是Selenium IDE吗?使用其他开发环境做某事可能要容易得多,但是如果你真的想做循环: Get the looping user-extension from this page 并运行这样的脚本。
store | 0 | myCurrent
storeEval | var pattern=new RegExp("\\w*http://localhost/mydomaine/index.php/checkout/cart/add\\w*");var i=0;var total=0;while(i<window.document.getElementsByTagName('input').length){if (window.document.getElementsByTagName('input')[i].id.match(pattern)){window.document.getElementsByTagName('input')[i].id = 'testID_' + total;total=total+1;}i=i+1;}total; | myTotal
while | storedVars.myCurrent < storedVars.myTotal
storeAttribute | //input[contains(@id,'testID_${myCurrent}')]@class | myid
echo | ${myid}
clickAndWait | //input[contains(@id,'testID_${myCurrent}')]
store | javascript{storedVars.myCurrent++}
endWhile
点击这些按钮有什么作用?它回发页面或类似的东西吗?如果是这样,您需要移动storeEval | var pattern ....在while循环中。 javascript的作用是将页面上与RegEx模式匹配的所有输入(您可能需要更改以匹配按钮ID)重命名为顺序ID,以便您可以轻松地循环它们。如果您可以利用不同的模式,请随意执行此操作。
改编自here
的Javascript答案 1 :(得分:0)
您可以使用xpath contains()函数来定位项目:
storeAttribute | //input[contains(@onclick,"setLocation('http://localhost/mydomaine/index.php/checkout/cart/add/uenc/")]@class | myid
echo | ${myid}
clickAndWait | //input[contains(@onclick,"setLocation('http://localhost/mydomaine/index.php/checkout/cart/add/uenc/")]@class
通过除onclick属性之外的其他内容引用元素也是一个好主意。 ID或名称将是不错的选择。