Попробуйте поймать параметры (анализ HTML таблицы в список) - PullRequest
0 голосов
/ 07 августа 2020

У меня есть код, который просматривает таблицу веб-сайта. Таблица является динамической 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 в Параметры, чтобы код продолжал выполнение до добавление в список завершено?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...