获取 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 元素