Selenium Api,Selenium定位器和正则表达式

时间:2009-11-23 14:38:22

标签: selenium selenium-rc

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

2 个答案:

答案 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属性是否以定位器字符串(示例中的静态部分)开头,如果是这样,则返回此元素。

我认为这种方法更清晰。