Как получить значение дочернего свойства свойства элемента с помощью селена webdriver, NUnit и C#

Я тестирую веб-сайты с использованием селена, и у меня возникают трудности с получением значения свойства, являющегося дочерним по отношению к другому свойству. Для меня этот 2-й / дочерний уровень всегда возвращается как ноль.

При попытке получить значение атрибута / свойства верхнего уровня он работает нормально со следующим кодом:

return Element1.GetAttribute("baseURI");
return Element2.GetAttribute("innerText");

Те, что выше, возвращают текст / строку, которую я ожидаю. Однако, если я попытаюсь получить значение дочернего свойства, как показано ниже:

return Element3.GetAttribute("style.cssText");
return Element4.GetAttribute("style.fontWeight")

Я получаю ноль. Когда я просматриваю DOM/ свойства элементов выше, я вижу значения, которые они имеют.

cssText: "font-weight: bold;"
fontWeight: "bold"

Если щелкнуть правой кнопкой мыши свойства в панели инструментов разработчика и выбрать "Копировать путь свойства", я получу следующее:

style.cssText
style.fontWeight    

Поэтому я считаю, что проблема заключается в том, как я ссылаюсь на дочернее свойство, полагая, что то, что я копирую с панели инструментов разработчика, является правильным. Я пробовал другие разделители, кроме периода, но мне все еще повезло.

Я пытаюсь выяснить синтаксис для возврата значения, хранящегося в -

object.style.fontWeight

Я пробовал:

parent.child.GetCSSValue("css"), parent-child.GetCSSValue("css")
parent.child.GetAttribute("attrib"), parent-child.GetAttribute("attrib")
parent.child.GetProperty("prop"), parent-child.GetProperty("prop")

Все они возвращаются как null или empty.string

2 ответа

Вы можете использовать JavaScript getComputedStyle а также getPropertyValue чтобы получить унаследованное значение атрибута стиля:

IJavaScriptExecutor js = (IJavaScriptExecutor)driver;

string fontWeight = (string) js.ExecuteScript("return window.getComputedStyle(arguments[0]).getPropertyValue('fontWeight')", element);

string cssText = (string) js.ExecuteScript("return window.getComputedStyle(arguments[0]).cssText", element);

Подробнее о getComputedStyle Вы можете найти здесь. Все остальное о css и selenium вы можете найти в разделе Как получить все css-стили из dom-элемента с помощью Selenium, C#

Кажется, ты был довольно близко. Чтобы получить cssText а также fontWeight Вы можете использовать getComputedStyle() а затем использовать getPropertyValue() чтобы получить стиль, и вы можете использовать следующее решение:

IJavascriptExecutor jse = (IJavascriptExecutor)driver;
String cssText_script = "var x = getComputedStyle(arguments[0]);" +
        "window.document.defaultView.getComputedStyle(x,null).getPropertyValue('cssText');"; ";
String fontWeight_script = "var x = getComputedStyle(arguments[0]);" +
        "window.document.defaultView.getComputedStyle(x,null).getPropertyValue('fontWeight');"; ";
string myCssText = (string) jse.ExecuteScript(cssText_script, Element3);
string myFontWeight = (string) jse.ExecuteScript(fontWeight_script, Element4);

Примечание. Необходимо вызвать WebDriverWait вместе с ExpectedConditions как метод ElementIsVisible.

Другие вопросы по тегам