Как получить значение дочернего свойства свойства элемента с помощью селена webdriver, NUnit и C # - PullRequest
0 голосов
/ 24 февраля 2019

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

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

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

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

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

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

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

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

style.cssText
style.fontWeight    

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

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

object.style.fontWeight

Iпробовал:

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

Все они возвращаются как нулевые или пустые. строка

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

Кажется, ты был довольно близко.Для извлечения 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 метод.

0 голосов
/ 24 февраля 2019

Вы можете использовать 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 #

...