我正在使用Selenium IDE进行一些Web应用程序测试,并希望引入一些随机性以扩展我们的测试。我当前正在使用Selenium storeAttributeValue,在其中给它一个XPath表达式,它存储与之匹配的第一个元素(排序)。但是我不想存储第一个匹配项,我希望它随机选择一个子节点。
storeAttributeValue
例如
//table[@id='mytable']//tr选择此表的所有tr子级。 //table[@id='mytable']//tr[0]选择第一个tr(假设现在嵌套表) //table[@id='mytable']//tr[3]选择第三个tr,依此类推。
//table[@id='mytable']//tr
//table[@id='mytable']//tr[0]
//table[@id='mytable']//tr[3]
是否有某种方法(完全在xpath中),我可以说“给我一个随机tr”,即//table[@id='mytable']//tr[SOMETHINGHERE]每次我“评估” /“运行”它将“返回”集合中的一个tr节点//table[@id='mytable']//tr。
//table[@id='mytable']//tr[SOMETHINGHERE]
如果XPath表达式不会从一个调用更改为另一个调用,并且输入源也将相同,那么您将需要通过参数化提供方差,否则 将始终输出具有相同输入的相同函数。相同的结果 ( 这就是为什么我对声明式范例进行评论 )。
就像是:
/table[@id='mytable']/tbody/tr[$pseudoRandom mod count(../tr) + 1]
如果每个输入源将进行一次评估,则XPath中最简单的伪随机性将是
/table[@id='mytable']/tbody/tr[count(//node()|//@*) mod count(../tr) + 1]
换句话说,以整个输入源的某些属性为种子进行一些伪随机性计算。