Индекс Watin OwnTableCellCells.Count иногда выходит за пределы допустимого диапазона

Я использую 20.20.1089, и иногда я получаю исключение, когда зацикливаюсь, как это

foreach (строка TableRow в table.TableRows) { for (int i = 0; i ‹ row.OwnTableCells.Count ; ++i) { // ИНДЕКС ИСКЛЮЧЕНИЯ ВНЕ ДИАПАЗОНА TableCell cell = row.OwnTableCells [i]; } }

В отладчике row.OwnTableCells.Count равен 0, но индекс цикла i увеличивается. Я могу получить исключение: ссылка на объект не указывает на экземпляр объекта.

Это происходит только иногда, что вызывает недоумение. Веб-страница всегда автоматически обновляется через несколько секунд. Может ли это быть причиной этого? Есть ли способ отключить кеш?

Робин

PS. Я пытаюсь опубликовать это в списке рассылки Watin, но, похоже, модератор пропал без вести и не одобряет новые регистрации.


person Community    schedule 31.01.2010    source источник


Ответы (1)


Привет, ваше письмо также было отправлено в список рассылки, но для записи я также опубликую свой ответ здесь.

Веб-страница всегда автоматически обновляется через несколько секунд. Может ли это быть причиной этого?

Это действительно ваша проблема. Следуя одному из возможных сценариев, чтобы показать вам, как что-то может пойти не так:

1 - вызов row.OwnTableCells.Count => возвращает количество элементов, находящихся в данный момент на странице

2 - таймер обновления запускает обновление страницы => страница перезагружается

3 - из-за обновления коллекция row.OwnTableCells больше не будет возвращать элементы, поскольку строка, на которую ссылались, больше не существует на странице. Вы можете по-прежнему видеть ту же строку в браузере, но это новый объект строки DOM, созданный после обновления страницы. В вашем коде вы/WatiN все еще ссылаетесь на старый объект строки.

Поэтому вам следует изменить свою логику, чтобы учесть это обновление страницы.

HtH, Йерун

person Jeroen van Menen    schedule 01.02.2010
comment
Спасибо, моя подписка была одобрена после того, как я задал вопрос здесь. - person ; 01.02.2010