Получение значений всех свойств 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)
Другие вопросы по тегам