2012-01-26 5 views

ответ

5

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

Смежные вопросы