在我的页面中,我有一些像“foo:searchResults12345”这样的id,它们由一个静态部分组成(“foo:searchResults”和一个动态渲染的一个 - 一个或多个数字。 我想检索包含静态部分“foo:searchResults”的每个id,忽略动态部分。 我正在考虑使用正则表达式来处理模式文本,但问题是我在Selenium Api中找不到任何方法来帮助我,例如selenium.getAllIdsInPage()。 任何人都有同样的问题,并找到了解决方案?
答案 0 :(得分: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"));
}
}
答案 1 :(得分:0)
另一种方法是使用自定义位置策略。我在我当前的项目中这样做,它工作正常。
在您的特定情况下,您可以编写一个自定义策略,检查每个元素的id属性是否以定位器字符串(示例中的静态部分)开头,如果是这样,则返回此元素。
我认为这种方法更清晰。