Получение значений всех свойств CSS выбранного элемента в Selenium
Предположим, что я нашел элемент по его XPath, используя:
WebElement we = driver.findElement(By.xpath("some XPath"));
Я знаю, что могу получить значение определенного свойства CSS с помощью we.getCssValue("some property")
, но могу ли я получить значения всех свойств без явного упоминания их имен?
2 ответа
к несчастью
это невозможно с нативным Selenium API.
Но используя Javascript вы можете:
Вы можете использовать некоторую поддержку JavaScript, используя Seleniums JavascriptExecutor.executeScript
функциональность.
Необходимый 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));
Вы можете изменить сценарий в соответствии с вашими потребностями. Например, вы можете вернуть строку, которая имеет ТОЛЬКО все значения без атрибутов. Не стесняйтесь менять и экспериментировать.
Обновить
Если вас заинтересуют только встроенные стили элемента, вы можете использовать "нативный" Selenium, как указано в комментариях @JeffC:
driver.findElement(By.tagName("div")).getAttribute("style")
НО!:
Это даст вам только "встроенные стили", а НЕ все CSS-стили, которые применяются к элементу. Если вы запустите обе версии друг за другом и напечатаете результаты, вы увидите огромную разницу.
Python-версия использования вышеуказанного скрипта для получения всех вычисленных свойств стиля:
from selenium import webdriver
from pprint import pprint
#require geckodriver in the directory where this script runs
driver = webdriver.Firefox()
driver.get('https://stackru.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)