获取 Selenium 中选定元素的所有 CSS 属性的值

Posted

技术标签:

【中文标题】获取 Selenium 中选定元素的所有 CSS 属性的值【英文标题】:Getting the values of all the CSS properties of a selected element in Selenium 【发布时间】:2015-12-08 20:00:37 【问题描述】:

假设我通过它的 XPath 找到了一个元素:

WebElement we = driver.findElement(By.xpath("some XPath"));

我知道我可以通过we.getCssValue("some property") 获取特定 CSS 属性的值,但是我是否可以在不显式提及其名称的情况下获取所有属性的值?

【问题讨论】:

有类似问题:***.com/questions/754607/… 实际上只是有点相似,因为@Milad 想知道如何在 Selenium 中做到这一点 【参考方案1】:

很遗憾

本机 Selenium API 无法做到这一点。

但是使用 javascript 你可以:

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

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

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

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 在 cmets 中指出的“原生”Selenium:

driver.findElement(By.tagName("div")).getAttribute("style")

但是!:

这只会为您提供“内联样式”,而不是应用于元素的所有 css 样式。如果您一个接一个地运行两个版本并打印结果,您会看到巨大的差异。

【讨论】:

从技术上讲,您可以使用driver.findElement(By.tagName("div")).getAttribute("style"),然后您必须像以前一样解析各个属性。 @JeffC 和 getAttribute("style") 你只会得到元素内联样式,而不是应用于元素的所有 css 样式!但这是补充我的答案的好点。谢谢。 @ShubhamJain 哈哈,谢谢队友!给我带来了 1k xp ;-) 非常特别!【参考方案2】:

使用上述脚本获取所有计算样式属性的 Python 版本:

from selenium import webdriver
from pprint import pprint
#require geckodriver in the directory where this script runs
driver = webdriver.Firefox()
driver.get('https://***.com')

#Set the element object to the inbox messages icon
element = driver.find_element_by_xpath('//a[@title="Recent inbox messages"]')

#Get all of the style properties for this element into a dictionary
styleprops_dict = driver.execute_script('var items = ;'+
                                   'var compsty = getComputedStyle(arguments[0]);'+
                                    'var len = compsty.length;'+
                                    'for (index = 0; index < len; index++)'+
                                    'items [compsty[index]] = compsty.getPropertyValue(compsty[index]);'+
                                    'return items;', element)
pprint(styleprops_dict)

【讨论】:

以上是关于获取 Selenium 中选定元素的所有 CSS 属性的值的主要内容,如果未能解决你的问题,请参考以下文章

获取所有子元素

Selenium xpath all (//*) 不会占用所有 css 元素

迭代所有“选择”元素并在 Selenium 中获取它们的所有值

获取所有子元素

selenium之css定位小结

如何在 Selenium WebDriver 中获取“ul”类的所有“li”元素