2013-08-27 3 views
0

У меня есть два вопроса, относящиеся к одной и той же проблеме ... Q1) Я использую WatiN (3.5) для автоматизации веб-сайта. Ситуация заключается в том, что я хочу получить тэг , когда страница результатов будет полностью загружена, но WatiN не дожидаясь, пока эта страница будет полностью загружена, и попытается установить этот div, что приведет к получению div с нулевым значением. Этот div заполняется AJAX. Это код, который я использую, чтобы избежать этой ошибки, но он не работает.Ожидание страницы для полной загрузки с использованием WatiN

while (resultDiv == null) 
      { 
       browser.Div("ui-tabs-1").WaitUntilExists(); 
       resultDiv = browser.Div("ui-tabs-1"); 
      } 

Так как я могу дождаться, когда страница будет полностью загружена с помощью WatiN?

Q2) Я нашел решение для указанной задачи here но я застрял в точке, как я не мог найти ссылку библиотеки для этих интерфейсов т.е. IElement и IBrowser. Эти интерфейсы используются в методах расширения. Я также попросил автора этой статьи и дождался его ответа. Я делаю это приложение, используя WatnN 2.5 и .Net framework 3.5 в VS 2010.

ответ

3

Я столкнулся с аналогичной проблемой с watin на сайте с использованием Ajax. Это обходной путь для этого.

// После щелчка по ссылке/вкладке/кнопке, на которой результат загружается на сайтах не Ajax. У нас есть функция здесь, browser.WaitForComplete(), но она работает только тогда, когда страница находится в состоянии загрузки. но в случае обновления Ajax на части окна браузера. поэтому не загружается состояние для браузера.

Таким образом, одно решение этой проблемы: Использование Thread.Sleep(10000); Это время может отличаться в зависимости от времени, которое требуется веб-сайту для загрузки требуемого div.

+1

Вы также можете использовать 'WaitUntilContainsText()', если это применимо, конечно. –

1

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

См. Ссылку Jeroen в его ответе здесь, если вы тестируете сайт ASP.NET Ajax: In WatiN how to wait until postback is complete - WaitForAsyncPostbackToComplete. Я использовал эту идею для некоторых методов и свойств, чтобы избавить мой код от многих длительных вызовов сна. Тесты выполнялись быстрее, и результаты были гораздо более надежными.

Если конкретный вызов JS не будет работать, поскольку вы используете другую платформу clientide, использование базовой концепции опроса с более короткими снами в цикле будет делать вас лучше, чем длинные сны.