在我的页面中,我有一些像“foo:searchResults12345”这样的 id,它们由一个静态部分(“foo:searchResults”和一个动态呈现的一个 - 一个或多个数字组成。我想检索包含静态部分“foo”的每个 id :searchResults",忽略动态的。我正在考虑使用正则表达式作为模式文本,但问题是我在 Selenium Api 中找不到任何方法来帮助我解决这个问题,例如 selenium.getAllIdsInPage()。任何人都有同样的问题并找到解决方案?
问问题
2296 次
2 回答
2
我建议结合getXpathCount
循环来遍历每个匹配项。例如,以下 xpath 在与getXpathCount
//*[starts-with(@id, 'foo:searchResults')]
然后,您应该能够使用以下示例 XPath 遍历每个匹配项:
/descendant::*[starts-with(@id, 'foo:searchResults')][1]
其中 1 将替换为循环中的当前计数。
下面是一个 Java 示例,它应该将匹配的 ID 打印到 system.out:
@Test
public void outputDynamicIds() {
selenium.open("http://www.example.com/");
int elementCount = selenium.getXpathCount("//*[starts-with(@id, 'foo:searchResults')]").intValue();
for (int i = 1; i < elementCount+1; i++) {
System.out.println(selenium.getAttribute("/descendant::*[starts-with(@id, 'foo:searchResults')][" + i + "]@id"));
}
}
于 2009-11-23T22:08:23.657 回答
0
另一种方法是使用自定义位置策略。我在我当前的项目中这样做,它工作正常。
在您的特定情况下,您可以编写一个自定义策略来检查每个元素的 id 属性是否以定位符字符串(示例中的静态部分)开头,如果是则返回此元素。
我认为这种方法更清洁。
于 2011-06-29T12:18:58.303 回答