Как найти все родительские элементы, используя Selenium C # WebDriver? - PullRequest
4 голосов
/ 26 января 2012

У меня есть переменная класса By.Я хочу позвонить FindElements, чтобы вернуть соответствующий элемент, а также все родительские элементы этого By.Как мне это сделать?

Ответы [ 2 ]

6 голосов
/ 26 января 2012

Если я правильно понимаю ваш вопрос, вы хотите найти элемент 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, который использует ту же логику, а затем возвращает все элементы одновременно.

0 голосов
/ 10 апреля 2019

Я создал расширение WebElement, надеюсь, пригодится.

public static IWebElement GetElementParentByClass(this IWebElement element, string ClassName)
{
    try
    {
        IWebElement parent = element;
        do
        {
            parent = parent.FindElement(By.XPath("./parent::*")); //parent relative to current element

        } while (!parent.GetAttribute("class").Equals(ClassName));

        return parent;
    }
    catch (Exception ex)
    {
        return null;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...