0

我是 Selenium 的新手,测试很重要。我正在尝试捕获部分动态生成的超链接元素的 id。当我在 selenium 中单击时,单击动作记录如下,粗体部分是动态生成的,我的页面上有很多,并且可能因站点而异(我正在测试 cms)。我想捕获并单击任何一个。这就是我从那时起尝试做的事情:

商店属性 | //button@class onclick="setLocation(javascript{baseUrlSelection()}['/checkout/cart/add/uenc/(a-zA-Z0-9) /product/(0-9) ]'')" | 我的身份


回声 | ${myid} |


点击并等待 | ${myid[0]}

它不起作用当点击动作记录在 selenium 中时,我的链接看起来像这样:buton[@onclick="setLocation(' http ://localhost/mydomaine/index.php/checkout/cart/add/uenc/aHR0cDovL2xvY2FsaG9zdC9NYWdlbnRvSGls

YWlyZURlbW9WMi9tYWdlbnRvZGVtb0hpbGFpcmVWMi9pbmRleC5waHAvY2F0ZWdvcmllMS5odG1sP19fX1NJRD1V /product/ 1 /')">请帮助。

4

2 回答 2

1

你在使用 Selenium IDE 吗?使用其他开发环境做一些事情可能会容易得多,但是如果你真的想做循环: 从这个页面获取循环用户扩展 并运行这样的脚本。

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 模式.... 在 while 循环中。javascript 所做的是将页面上与 RegEx 模式(您可能需要更改以匹配您的按钮 ID)匹配的所有输入重命名为顺序 ID,以便您可以轻松地遍历它们。如果您可以利用不同的模式,请随意这样做。

Javascript 从这里改编

于 2009-04-20T21:35:21.103 回答
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 或 name 将是不错的选择。

于 2009-04-20T19:00:08.197 回答