Что лучше подходить для ожидания элементов на странице Waitforcomplete () или system.threading.thread.sleep () - PullRequest
1 голос
/ 15 апреля 2009

Я использую WaitforComplete () в watiN, но, похоже, он не работает хорошо. Как он выполняет следующий оператор, даже если вы дали больше времени для ожидания. Я использую thread.sleep (), чтобы остановить приложение, пока оно не получит нужную страницу или элемент. Но дело в том, что страницы настолько динамичны, что иногда это занимает гораздо больше времени, чем указано.

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

Образец кода

    'Show Details page
    Assert.AreEqual("Confirmation", _internetExplorer.Title)

    If (_internetExplorer.Button(Find.ById(New Regex("btnFinish"))).Exists) Then
        _internetExplorer.Button(Find.ById(New Regex("btnFinish"))).Click()
    Else
        Assert.Fail("Could not Find Finish Booking Button on Confirmation Page")
    End If

    System.Threading.Thread.Sleep(100000)

'Показать страницу с описанием бронирования Assert.AreEqual («Показать бронирование», _internetExplorer.Title)

Я хочу что-то, что обнаружит возврат страницы динамически. вместо того, чтобы давать какое-то постоянное значение.

Ответы [ 3 ]

5 голосов
/ 17 апреля 2009

WaitForComplete хорошо работает только при наличии обратной передачи после какого-либо действия. В противном случае вы должны найти что-то еще, чтобы ждать. Ниже приведен пример того, как ждать указанного заголовка:

_internetExplorer.Element("title", "Confirmation").WaitUntilExists();

Я бы всегда предпочел использовать один из методов WaitXXX вместо Thread.Sleep, потому что методы WaitXXX только ждут, когда будет выполнено ограничение Где как Sleep ждет указанного вами времени. Если это долго, время талии. Если коротко, проблемы возникают.

НТН, Йерун

4 голосов
/ 06 мая 2009

Метод WaitForComplete по существу включается, как только браузер установил свое состояние готовности на завершение, а состояние занятости - ложь.

Что я обычно делаю, это пытаюсь получить доступ к тому, что вам нужно, затем выполнить thread.sleep, скажем, полсекунды, а затем повторить попытку. У меня также есть глобальное время ожидания, которое завершается, скажем, через 10 секунд.

    int timeout = 20;
    bool controlFound = false;
    for (int i = 0; i < timeout; i++)
    {
        if (_internetExplorer.Button(Find.ById(New Regex("btnFinish"))).Exists)
        {
            _internetExplorer.Button(Find.ById(New Regex("btnFinish"))).Click();
            controlFound = true;
            break;
        }
        else
        {
            System.Threading.Thread.Sleep(500);
        }   
    }


   if (!controlFound)
   {
        Assert.Fail("Control not found");
   }
0 голосов
/ 15 апреля 2009

Если он выполняет следующий оператор, он должен найти соответствующий элемент. Я предлагаю опубликовать пример кода, который вы пытаетесь.

...