XPath 对 CSS 样式一无所知,它不理解属性并将它们视为简单的字符串。如果 XML 查询语言理解 CSS 样式,那会很奇怪,对吧?
此外,它getAttribute()
使用类似于XPath 的构造,但不是XPath!它还通过@
符号选择属性,对。但是考虑一下这个定位器:"id=target@style"
. 它可以工作,但绝对不是 XPath。
它还将返回显式设置的属性,而不是内部计算值,因此除非元素上style
确实存在属性,否则它是无用的。style
如果style
定义了属性,那就去吧。
Selenium 本身不能给你正确的答案(WebDriver 有getCssValue()
,但在 Selenium RC 中没有对应的,afaik)。
因此,在 Selenium RC 中获取元素的计算样式(从所有来源计算的最终值)的唯一方法是通过 JavaScript。
多年来一直为我工作的脚本(经过轻微编辑)是这样的(来自quirksmode.org):
function getStyle(id, stylePropJs, stylePropCss) {
var x = document.getElementById(id);
if (x.currentStyle)
var y = x.currentStyle[stylePropJs];
else if (window.getComputedStyle)
var y = document.defaultView.getComputedStyle(x,null).getPropertyValue(stylePropCss);
return y;
}
请注意,IE 需要属性的 JavaScript 名称,但其他所有浏览器都使用 CSS 名称。此外,您不能使用速记属性,而必须使用扩展属性。因此,在您的情况下:
String script = "var x = document.getElementById('target');" +
"if (x.currentStyle) var y = x.currentStyle['borderTopColor'];" +
"else if (window.getComputedStyle) var y = document.defaultView.getComputedStyle(x,null).getPropertyValue('border-top-color');" +
"y;";
String color = selenium.getEval(script);
target
这将返回元素顶部边框的颜色(是的,您需要调用它四次才能获得整个边框) 。但猜猜怎么了!每个浏览器都以不同的格式返回颜色。幸运的是,至少在 Java 中,有一个Color
类可以轻松地重新格式化它:
String color = Color.fromString(color).asHex();
现在您已经存储了十六进制编码的颜色,您可以轻松检查它是否为绿色。