【发布时间】:2016-09-02 10:07:33
【问题描述】:
我有一个动态链接列表,其中还包含动态IDs、CSS 以及获取元素列表的所有其他选项,但只有一种方式没有用处。使用contains()。但以哪种方式?
该列表包含XPATH 值,如下所示:
//a[@id='contentDataTable:4711:startMenu']/span
//a[@id='contentDataTable:4712:startMenu']/span
//a[@id='contentDataTable:4713:startMenu']/span
..
//a[@id='contentDataTable:4714:startMenu']/span
我不能使用匹配,因为 XPATH 1.0 仅支持 Selenium。所以我正在寻找正确的contains() 呼叫...
第一个想法是
xpath=//a[contains(@id, 'contentDataTable:')]
但它不起作用。
我是如何尝试获取元素的:
public List<WebElement> getWebElements(Boolean isDebug, Boolean isHPOMDebug, RemoteWebDriver remWebDriver, String htmlType, String htmlValue, String actField) {
List<WebElement> webElements = null;
String webRequest = "";
try {
switch (htmlType) {
case "XPATH":
webRequest = htmlValue;
webElements = remWebDriver.findElements(By.xpath(webRequest));
break;
case "LINKTEXT":
webRequest = htmlValue;
webElements = remWebDriver.findElements(By.linkText(webRequest));
break;
case "LINKTEXTPART":
webRequest = htmlValue;
webElements = remWebDriver.findElements(By.partialLinkText(webRequest));
break;
case "CSS":
webRequest = htmlValue;
webElements = remWebDriver.findElements(By.cssSelector(webRequest));
break;
case "TAG":
webRequest = htmlValue;
webElements = remWebDriver.findElements(By.tagName(webRequest));
break;
case "ID":
webRequest = actField;
webElements = remWebDriver.findElements(By.id(webRequest));
break;
case "NAME":
webRequest = actField;
webElements = remWebDriver.findElements(By.name(webRequest));
break;
default:
webElements = null;
} // END OF INNER SWTICH
if (isDebug && webElements != null && webElements.size() > 1) {
logger.log(LogStatus.INFO, "getWebElements: " + webRequest + " FOUND: " + webElements.size());
for (int i=0;i<webElements.size(); i++) {
logger.log(LogStatus.INFO, "getWebElements: (" + i + ") TEXT = [" + webElements.get(i).getText() + "]");
logger.log(LogStatus.INFO, "getWebElements: (" + i + ") TAG = [" + webElements.get(i).getTagName() + "]");
logger.log(LogStatus.INFO, "getWebElements: (" + i + ") LOC = [" + webElements.get(i).getLocation() + "]");
}
report.flush();
}
}
catch (Exception e) {
e.printStackTrace();
webElements = null;
}
return(webElements);
}
【问题讨论】:
-
为什么你认为它不起作用?它或
//a[starts-with(@id, 'contentDataTable:')]应该可以工作。 -
您提供的 xpath 看起来不错,所以为什么这个 xPath 不起作用?有什么例外吗??
-
您的 xpath 看起来不错,是否已直接在 firefox 或 chome 中使用您的 xpath 对其进行了测试?
-
@splash58 我得到一个空指针异常...我再检查一次,也许我是个白痴:)
-
//a[@id='contentDataTable:4713:startMenu']/span是否返回结果?
标签: java selenium xpath contains elements