@rinnn

Как правильно выполнить цикл?

private void button1_Click(object sender, EventArgs e)
        {
            IWebDriver driver;
            FirefoxOptions options = new FirefoxOptions();
            options.AddArguments("--headless");
            driver = new FirefoxDriver(options);
            driver.Url = "http://table.a.ru";
            System.Threading.Thread.Sleep(600);
            IWebElement table = driver.FindElement(By.XPath("/html/body/div[2]/table/tbody"));
            string a = ")]";

            string user = textBox1.Text; //введенный в текстбокс id сотрудника, который внедряем в xpath ниже
            IWebElement oper = driver.FindElement(By.XPath("/html/body/div[2]/table/tbody/tr/td[contains(text()," + user + a));
            string dobcount = oper.Text;
            label2.Text = Convert.ToString(dobcount);
            //Сотрудник
            IList<IWebElement> findvalues = driver.FindElements(By.TagName("td"));
            string res = "";

            foreach (IWebElement values in findvalues)
            {
                res += values.Text + "/";
            }
            res = res.Substring(res.IndexOf(dobcount));
            //res = res.Remove(res.IndexOf("tr"));
            String[] td = res.Split(new char[] { '/' });
            res = "Доб. " + td[0] + "\r\n" + " Сотрудник: " + td[1] + "\r\n" + " Пропущенные: " + td[3] + "\r\n" + " Принятые звонки: " + td[5] + "\r\n" + " В перерывах: " + td[14] + "\r\n" + " Текущий статус: " + td[15];
            label3.Text = Convert.ToString(res);
            System.Threading.Thread.Sleep(600);
        }


Получаем данные из таблицы, для вывода полученной инфы в label, который находится в окне.
Вопрос в том, что в первый раз все выводится, а на второй выдает ошибку (ссылаясь на эту строку res += values.Text + "/";), в которой сказано, что найти значение не удается, так как документ, возможно был обновлен. Таблица динамическая, постоянно обновляется, насколько я понимаю, когда идет "2-ой круг", значение остается тем же, что и в первый раз. Что можно сделать?
  • Вопрос задан
  • 122 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Satangelus
Вы же сами пишите табличка динамическая. Значит размер коллекции findvalues может менятся, а foreach этого не любит, так как в нем используется перечислитель, производиться проверка на изменение коллекции.

Попробуйте, обычный for

for (int i = 0; i < findvalues.size(); i++) 
 { 
       res += findvalues[i].Text + "/";
 }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы