【发布时间】:2014-12-04 13:03:52
【问题描述】:
在 Java 中,如何正确确定 XPath 选择器是针对属性还是元素?
为了解释这个问题:我需要从 WebDriver 的 WebElement 中获取文本。元素的 innerText 或其属性取决于 XPath。不幸的是,每次提取都是不同的(见下文),所以我必须首先确定预期的目标是什么,元素或属性:
String getStringValue(String selector, WebElement context) {
if(targetsAttribute(selector) {
WebElement node = context.findElement(new By.xpath(elemPart(selector)));
return node.getAttribute(attrName(selector));
} else {
return context.findElement(new By.xpath(selector)).getText();
}
};
我正在寻找targetsAttribute、elemPart 和attrName 方法的实现。目前我使用正则表达式:
Pattern ATTR_PAT = Pattern.compile("^.*/@([^/]+)$");
Pattern ELEM_PAT = Pattern.compile("^(.*)/@[^/]+$");
但我发现这种方法丑陋且不系统。例如,它与 attribute:: 不匹配。有没有办法使用一些标准库来做到这一点?
注意:我实际上是在尝试解决与以下问题类似的问题,只是稍微高一点:
【问题讨论】:
-
一个术语:在 XML 和 XPath 中,元素和属性都是文档树中的节点。因此,您要问的是“属性或元素”,而不是“属性或节点”。因此,标识符 WebElement、findElement 等。不过,这是个好问题。