У меня есть код, который просматривает таблицу веб-сайта. Таблица является динамической c, и элементы загружаются в нее при прокрутке пользователя.
У меня есть параметры:
public class UserTableRow
{
private readonly IWebElement row;
public string Username => row.FindElement(By.XPath(".//div[contains(@class, 'slick-cell l0 r0')]")).Text;
public string Firstname => row.FindElement(By.XPath(".//div[contains(@class, 'slick-cell l1 r1')]")).Text;
public override string ToString()
{
return "SharePrice: " + Username.ToString() + ": " + Firstname.ToString();
}
public UserTableRow(IWebElement row)
{
try
{
this.row = row;
}
catch (Exception)
{
throw;
}
}
}
Вот сам метод добавления данных в список.
public static IEnumerable<UserTableRow> AddItemsToList(IWebDriver driver)
{
IReadOnlyCollection<IWebElement> rows = new List<IWebElement>();
List<UserTableRow> DataHere = new List<UserTableRow>();
driver.FindElement(By.XPath("//*[@id=\"disabled_users_show_label\"]")).Click();
Thread.Sleep(7000);
driver.FindElement(By.XPath("//*[@id=\"users_table\"]/div[5]/div/div[1]")).Click();
for (int i = 0; i < 11; i++)
{
rows = driver.FindElements(By.CssSelector("#users_table .slick-viewport .slick-row"));
// Now we will iterate through cells in table and compare to what we already have in the list
foreach (IWebElement cell in rows)
{
rows = driver.FindElements(By.CssSelector("#users_table .slick-viewport .slick-row"));
// Add data to our object
DataHere.Add(new UserTableRow(cell));
//We need to select table first to be able to scroll down. We do it directly here
Actions actions = new Actions(driver);
actions.SendKeys(Keys.ArrowDown).Build().Perform();
}
}
List<UserTableRow> noDupes = DataHere.Distinct().ToList();
return noDupes;
}
Все идет нормально, но в какой-то момент (я не знаю почему) выявляется ошибка:
OpenQA.Selenium.StaleElementReferenceException: 'ссылка на устаревший элемент: элемент не прикреплен в документ страницы (Информация о сеансе: chrome = 84.0.4147.105) '
Указывая на row.FindElement(By.XPath(".//div[contains(@class, 'slick-cell l0 r0')]")).Text;
Любые идеи, как добавить try catch в Параметры, чтобы код продолжал выполнение до добавление в список завершено?