Если я правильно понимаю ваш вопрос, вы хотите найти элемент By
, а затем родителей вплоть до корня.
Вы можете просто использовать XPath, чтобы получить родительский элемент, пока не доберетесь до корня страницы. Так что-то вроде этого:
public ReadOnlyCollection<IWebElement> FindElementTree(By by)
{
List<IWebElement> tree = new List<IWebElement>();
try
{
IWebElement element = this.driver.FindElement(by);
tree.Add(element); //starting element
do
{
element = element.FindElement(By.XPath("./parent::*")); //parent relative to current element
tree.Add(element);
} while (element.TagName != "html");
}
catch (NoSuchElementException)
{
}
return new ReadOnlyCollection<IWebElement>(tree);
}
При желании вы можете остановиться на элементе body
вместо html
.
Также обратите внимание, что это довольно медленно, особенно если это глубоко вложенный элемент. Более быстрой альтернативой было бы использование ExecuteScript
для запуска фрагмента JavaScript, который использует ту же логику, а затем возвращает все элементы одновременно.