我有一个网页,其中很少有文本字段可以使用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作为自动化框架。
由于 基兰
答案 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')]