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