Модульные тесты Watin с проблемой синхронизации времени - PullRequest
4 голосов
/ 26 ноября 2009

Привет, я использую WatiN (версия 2.0.10.928) с NUnit (2.5.2.9222) если у меня есть что-то вроде <pre> [Test] public void WebPageTest() { string url = "www.google.com"; IE ie = new IE(url);<br> ie.TextField(Find.ByTitle("Google Search")).TypeText("Watin"); ie.Button(Find.ByName("btnG")).Click();<br> ie.Element(Find.ByText("WatiN")).Click();</p> <pre><code> // ie.WaitForComplete(); Assert.IsTrue(ie.Text.Contains("Welcome at the WatiN")); ie.Close(); }

Тогда обычно это сработает, и тест будет пройден, но иногда, когда я нажимаю "Утвердить", кажется, что Ватин еще не загрузил страницу и все еще находится на предыдущей странице. У меня есть эта проблема, используя свойства IE.Text или IE.Url. Я пытался использовать WaitForComplete () (хотя это не должно быть необходимым), но все же иногда возникала та же проблема.
Кто-нибудь имел эту проблему с WatiN раньше? Кто-нибудь успешно смог использовать WatiN с NUnit, как это? Или, может быть, он будет работать лучше с другой структурой модульного тестирования, такой как MBUnit? Кому-нибудь повезло больше с MBunit?

Ответы [ 4 ]

1 голос
/ 08 июля 2011

У меня была такая же проблема с моими тестами; к сожалению, не похоже, что вы можете предположить, что WaitForComplete(), который должен быть присущ методу Click(), будет работать правильно. Даже явный вызов WaitForComplete() впоследствии не всегда работал.

В качестве крайней меры мы использовали System.Threading.Thread.Sleep(int timeout_in_milliseconds), чтобы заставить браузер дать странице время для загрузки. Это не полностью пуленепробиваемый способ сделать это, но он устранил около 90% ошибок такого рода. Для тайм-аута мы использовали от 500 до 2000 миллисекунд, в зависимости от того, сколько времени требуется для загрузки и насколько быстро мы хотим, чтобы тест выполнялся.

1 голос
/ 26 ноября 2009

Используемый вами тестовый фреймворк ничего не изменит, боюсь, это один из "хитростей" любого тестового фреймворка, и WaTin ничем не отличается.

Вызов WaitForComplete() определенно необходим, боюсь.

Некоторые из моих коллег сообщили, что версия IE может изменить ситуацию; В частности, IE6 имеет некоторые внутренние проблемы синхронизации, которые могут вызвать проблемы. IE8 выглядит немного лучше.

0 голосов
/ 18 сентября 2012

Я использовал ie.WaitForComplete (), но он по-прежнему вызывает ожидание, а иногда и время ожидания, поэтому я использую

  Settings.AttachToBrowserTimeOut = 200;
  Settings.WaitForCompleteTimeOut = 200;

Это сработало для меня.

0 голосов
/ 12 августа 2010

Попробуйте использовать

    [Test]  
    public void WebPageTest()  
    {  
        string url = "www.google.com";  
        IE ie = new IE(url);  
        ie.TextField(Find.ByTitle("Google Search")).TypeText("Watin");  
        var btnG = ie.Button(Find.ByName("btnG"));  
        btnG.ClickNoWait();  
        ie.WaitForComplete(400);  
        var elementWatin = ie.Element(Find.ByText("WatiN"));  
        elementWatin.ClickNoWait();  
        ie.WaitForComplete(400);  
        Assert.IsTrue(ie.Text.Contains("Welcome at the WatiN"));  
        ie.Close();  
    }

Спасибо Ганди Раджан

...