Как получить значение дочернего свойства свойства элемента с помощью селена 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.