如何使用动态ID获取这些输入字段

时间:2012-06-29 07:37:33

标签: java selenium-ide selenium-firefoxdriver

我有一个网页,其中很少有文本字段可以使用Selenium WebDriver填充一些值。但我无法使用selenium framwework中提供的API获取这些项目,因为ID正在动态变化。

例如,其中一个文本字段具有以下ID

<input id="order_unit_line_rate_806099_unit_price" type="text" value="" uniqueattr="Dynamic Site Accelerator / Dynamic Site Accelerator / Platform Fee / / Price" size="10" onchange="javascript:numberFormatValid('order_unit_line_rate_806099_unit_price', parseI18nNumber($('order_unit_line_rate_806099_unit_price').value, ',', '.'), 5, '.');" name="order_unit_line_rate[806099][unit_price]">

其中作为id的一部分的数字806099针对每个新页面和每个新文本框而变化。通过使用findElements(By.id())API,我没有任何运气。

有人可以建议任何识别这些元素的方法。

我使用eclipse作为编辑器,java作为客户端驱动程序,selenium webDriver作为自动化框架。

由于 基兰

3 个答案:

答案 0 :(得分:1)

您可以使用findElementsByTagName然后遍历每个返回的元素,检查其ID与正则表达式:

public static WebElement findElementByRegexId(FindsByTagName ctx, String tagName, String regex) {
    List<WebElement> l = ctx.findElementsByTagName(tagName);
    for (WebElement e : l) {
        if (e.getAttribute("id").matches(regex)) {
            return e;
        }
    }
    return null;
}

答案 1 :(得分:0)

selenium API还允许您传递XPath定位器,因此您可以尝试类似

的内容
findElements(By.xpath("//input[@uniqueattr=\"Dynamic Site Accelerator / Dynamic Site Accelerator / Platform Fee / / Price\"]"));

有关详细信息,请参阅here

答案 2 :(得分:0)

您可以使用以下解决方案

,而不是使用正则表达式
//input[contains(@name, 'order_unit_line_rate')]