Это интересная проблема, с которой я сталкивался в прошлом. Через несколько разочаровывающих сеансов отладки я обнаружил, что мои WebElement
объекты динамически менялись в зависимости от того, что было видно на странице. Я бы извлек List<WebElement>
, изменил что-то на странице и заметил, что мой List<>
действительно изменился бы с содержанием на странице.
Чтобы ответить на ваш вопрос ..... Я неполностью уверен, если это возможно, хранить WebElement
сам, не удаляя старый div
, как вы упомянули.
Единственный способ обойти это, я бы предложил создать свой собственный класс Element
и назначить этому классу WebElements
, чтобы вы могли создать свой собственный "кэш" элементов.
Вотнебольшой пример:
public class Element
{
public string TagName { get; set; }
public string Text { get; set; }
public bool Displayed { get; set; }
// any other attributes you want to store here
}
public List<Element> StoreWebElements(List<IWebElement> seleniumElements)
{
var result = new List<Element>();
foreach (var elem in seleniumElements)
{
result.Add(new Element { TagName = elem.TagName,
Text = elem.Text,
Displayed = elem.Displayed
};
}
}
// your code
var divList = Driver.FindElements(By.Name("elemName"));
// "store" the elements
var cachedElements = StoreWebElements(divList);
// do something on the page to change it
// divList will change, but cachedElements will stay the same.
Это немного хакерское решение, но лично я никогда не находил обходного пути к проблеме, которую вы описали. Мне было бы любопытно узнать, есть ли у кого-нибудь еще объяснение или лучшее решение для этого.