gpt4 book ai didi

xpath - 如何使用 Selenium 的 xpath 获得第二个属性级别

转载 作者:行者123 更新时间:2023-12-03 00:53:18 25 4
gpt4 key购买 nike

我正在尝试检查 Selenium 中的元素是否有绿色边框。

我可以使用 //div[@id="target"]/@style 来获取应用的解析样式字符串...并使用字符串搜索来搜索边框...我必须解决一些浏览器显示简写(border:solid 3px green)和其他显示扩展(border-style:solid; border-color:green.... >) ...但是我怎样才能更干净地做到这一点?

理想情况下类似于://div[@id="target"]/@style.borderColor

我还想避免使用 contains 选择器,因为语法很糟糕。但如果这是唯一的方法,那就这样吧。当然。

最佳答案

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();

现在您已经存储了十六进制编码的颜色,您可以轻松检查它是否是绿色。

关于xpath - 如何使用 Selenium 的 xpath 获得第二个属性级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11268210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com