1

我有一个网页,其中很少有文本字段需要使用 Selenium WebDriver 填充一些值。但是我无法使用 selenium 框架中提供的 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 作为自动化框架。

谢谢基兰

4

3 回答 3

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;
}
于 2012-06-29T08:21:09.733 回答
0

您可以使用以下解决方案,而不是使用正则表达式

//input[contains(@name, 'order_unit_line_rate')] 
于 2012-06-29T09:24:41.120 回答
0

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

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

有关更多详细信息,请参见此处

于 2012-06-29T09:06:59.467 回答