假设我通过使用以下命令的XPath找到了一个元素:
WebElement we = driver.findElement(By.xpath("some XPath"));
我知道我可以通过we.getCssValue("some property")来获取特定CSS属性的值,但是我可以在不必显式提及其名称的情况下获取所有属性的值吗?

最佳答案

很遗憾

原生Selenium API无法做到这一点。

但是,使用Javascript您可以:

您可以使用Seleniums的JavascriptExecutor.executeScript功能使用一些javascript支持。

可以在herehere中找到必要的js代码(由@Mahsum Akbas提出)

现在,这里是Java/Selenium代码,它将以“css-attribute01:value01; css-attribute02:value02;”的形式返回给您一个字符串。
请注意,这将在元素上返回所有 css属性。

WebElement we = driver.findElement(By.tagName("div"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
String script = "var s = '';" +
                "var o = getComputedStyle(arguments[0]);" +
                "for(var i = 0; i < o.length; i++){" +
                "s+=o[i] + ':' + o.getPropertyValue(o[i])+';';}" +
                "return s;";

System.out.println(executor.executeScript(script, we));

您可以根据需要更改脚本。例如,您可以返回一个仅包含所有值而没有属性的字符串。随时进行更改和尝试。

更新

如果只对元素的内联样式感兴趣,则可以使用@JeffC在注释中指出的“ native ” Selenium:
driver.findElement(By.tagName("div")).getAttribute("style")

但!:

这只会给您“内联样式”,而不是所有应用于元素的css样式。如果您同时运行两个版本并打印结果,则将看到巨大的差异。

09-04 18:54
查看更多