1

在我的页面中,我有一些像“foo:searchResults12345”这样的 id,它们由一个静态部分(“foo:searchResults”和一个动态呈现的一个 - 一个或多个数字组成。我想检索包含静态部分“foo”的每个 id :searchResults",忽略动态的。我正在考虑使用正则表达式作为模式文本,但问题是我在 Selenium Api 中找不到任何方法来帮助我解决这个问题,例如 selenium.getAllIdsInPage()。任何人都有同样的问题并找到解决方案?

4

2 回答 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 回答