Кажется, что общая тема среди ТАК вопросов относительно WatiN имеет отношение к фактическому получению вещи работа, и я не исключение.
Я загрузил последний выпуск WatiN (2.0.20.1089), и пытаюсь создать NUnit / WatiN, эквивалентный из Привет, Мир:
using WatiN.Core;
using NUnit.Framework;
namespace Foo.Browser.Tests
{
[TestFixture]
public class BrowserTests
{
[Test]
[STAThread]
public void ExampleTest()
{
IE ie = new IE("http://www.google.com");
ie.TextField(Find.ByName("q")).TypeText("WatiN");
ie.Button(Find.ByValue("Google Search")).Click();
Link link = ie.Link(Find.ByUrl("http://watin.sourceforge.net/"));
Assert.That(link.Text == "WatiN Home");
}
[Test]
public void FirefoxTest()
{
FireFox ff = new FireFox("http://www.google.com");
ff.TextField(Find.ByName("q")).TypeText("WatiN");
ff.Button(Find.ByValue("Google Search")).Click();
Link link = ff.Link(Find.ByUrl("http://watin.sourceforge.net/"));
Assert.That(link.Text == "WatiN Home");
}
}
Это подсказки IE (8) после возможного тайм-аута со следующим отслеживанием стека:
в WatiN.Core. UtilityClasses. TryFuncUntilTimeOut. ThrowTimeOutException (Исключение lastException, Строковое сообщение) в WatiN.Core. UtilityClasses. TryFuncUntilTimeOut. HandleTimeOut () в WatiN.Core. UtilityClasses. TryFuncUntilTimeOut. Попробуйте [T] (DoFunc '1 func) в WatiN.Core. WaitForCompleteBase. WaitUntil (DoFunc' 1 waitWhile, BuildTimeOutExceptionMessage exceptionMessage) в WatiN.Core. Собственный компонент. InternetExplorer. IEWaitForComplete. WaitWhileFrameDocumentNotAvailable (кадр IWebBrowser2) в WatiN.Core. Собственный компонент. InternetExplorer. IEWaitForComplete. WaitForFramesToComplete (IHTMLDocument2 maindocument) в WatiN.Core. Собственный компонент. InternetExplorer. IEWaitForComplete. WaitForFramesToComplete (IHTMLDocument2 maindocument) в WatiN.Core. Собственный компонент. InternetExplorer. IEWaitForComplete. WaitForCompleteOrTimeout () в WatiN.Core. WaitForCompleteBase. DoWait () в WatiN.Core. DomContainer. WaitForComplete (IWait waitForComplete) в WatiN.Core. IE.WaitForComplete (Int32 waitForCompleteTimeOut) в WatiN.Core. DomContainer. WaitForComplete () в WatiN.Core. Браузер. GoTo (URL Uri) в WatiN.Core. IE.FinishInitialization (Uri Uri) в WatiN.Core. IE.CreateNewIEAndGoToUri (Uri Uri, IDialogHandler logonDialogHandler, булевская переменная createInNewProcess) в WatiN.Core. IE.. ctor (Строковый URL) в Foo. Браузер. Тесты. BrowserTests. ExampleTest () в C:\Development\Foo\Foo.Browser.Tests\BrowserTests.cs:line 19
У меня есть необходимый файл конфигурации в моей bin\debug папке (Foo. Браузер. Tests.dll.config), как указано на странице документации WatiN, поэтому чем еще это, вероятно, будет? У кого-либо есть какие-либо предложения для того, что могло бы вызывать проблему?
Фил,
взглянуть на Innerexception of Remde Timeoutexcepeepeetion. Это, скорее всего, будет содержать больше информации, чтобы решить вашу проблему.
HTH Jeroen Van Menen Ведущий Дэр Уотин
Не было в большинстве выпусков Watin через Xunit.net сам.
Вот список прачечных, которым люди должны чувствовать себя свободно редактировать в и / или предлагать обновления:
Один большой Gogcha, который повочен мне, WRT Watin, это то, что после нескольких тысяч вызовов на WS08 IE откажутся к сотрудничеству, пока вы не выйдете и снова выйдете (см. Одно из моих выдающихся вопросов). Маршрут. Это академически для многих сценариев.
Я столкнулся с проблемами, схожими с проблемами Рубена, связанными с ситуацией выхода из логотипа/входа в логотип. Лучшая аргументация, которую я смог найти до сих пор, связана с тем, что WatiN использует IE с помощью COM сервера. Могут возникнуть проблемы с утилизацией, но это совсем другая Опра...
Что касается ситуации с тайм-аутом, то она случается время от времени, но обычно появляется сообщение в консоли NUnit и продолжается. Одно большое различие, которое я вижу между вашей реализацией и моей, заключается в том, что я запускаю экземпляр IE как однокнопочный объект. Таким образом, мне никогда не придется закрывать и открывать IE между тестами, и с тех пор я не сталкивался с проблемой логотипа/входа в систему. Следовательно, мои циклы тестирования короче, даже когда IE виден и не работает в фоновом режиме.
Похоже, Фил ответил на ваш вопрос, но я обнаружил, что ваш пример также генерирует исключения. Чтобы исправить указанную проблему, я изменил поиск ссылки, чтобы он выглядел по атрибуту (href), как показано ниже.
[Test]
public void ExampleTest()
{
IE ie = new IE("http://www.google.com");
ie.TextField(Find.ByName("q")).TypeText("WatiN");
ie.Button(Find.ByValue("Google Search")).Click();
Link link = ie.Link(Find.By("href", "http://watin.sourceforge.net/"));
Assert.That(link.Text == "WatiN Home");
}
Обратите внимание, что я тестировал только IE, так как на этом компьютере не установлен FireFox.