WatiN не будет работать с MSpec - UnauthorizedAccessException

Я пытаюсь заставить WatiN работать с MSpec в VS2010, используя TestDriven.Net. Мой код выглядит следующим образом:

[Subject("Whatever")]
public class when_on_home_page {

    private static IE browser;

    Establish context = () =>
        browser = new IE();

    Because of = () => {
        browser.GoTo("http://localhost:1234/");
        browser.WaitForComplete();
    };

    It should_show_add_details_link = () =>
        browser.Link(Find.ByValue("Add Details")).Exists.ShouldBeTrue();
}

Когда я запускаю это, браузер загружает страницу, но когда он проверяет ссылку, я получаю:

Как бы то ни было, когда на главной странице
»должна отображаться ссылка на добавление сведений (НЕУДАЧА)

Не удалось выполнить проверку «должна отображаться ссылка на добавление сведений»: System.UnauthorizedAccessException: доступ запрещен. (Исключение из HRESULT: 0x80070005 (E_ACCESSDENIED)) в mshtml.IHTMLElementCollection.tags (Object tagName) в WatiN.Core.Native.InternetExplorer.IEElementCollection.GetElementsByTag (String tagName) в WatiN.ElementsTag (String tagName) в WatiN.Elements tag (String tagName). .Core.NativeElementFinder.d__2.MoveNext () в WatiN.Core.ElementFinder.FindFirst () в WatiN.Core.Element.FindNativeElementInternal () в WatiN.Core.Element.get_Exists () NavigationSpecs.cs (20,0): at RoboWeb.Specs.when_on_home_page. ‹. Ctor> b__2 () в Machine.Specifications.Model.Specification.InvokeSpecificationField () в Machine.Specifications.Model.Specification.Verify ()

Осмотревшись, я проверил следующее:

  • VS работает от имени администратора
  • TestDriven.Net запускает все в режиме STA, видимо
  • В IE отключен защищенный режим
  • Я не могу добавить сайт в список надежных сайтов, предположительно потому, что он работает локально.
  • Я вызываю WaitForComplete (), а также пробовал Thread.Sleep ()

Я также пробовал с FireFox, но он просто вылетает.

Есть идеи, что я здесь делаю не так?


person Grant Crofton    schedule 11.03.2011    source источник


Ответы (2)


Эти спецификации мне подходят . Собственно, это моя первая спецификация WatiN; Я написал, пытаясь воспроизвести полученную вами ошибку. :-)

Единственное, что мне нужно было сделать, это отключить защищенный режим IE. Я проверил спецификации

  • в командной строке (см. WebSpecs-Watin.cmd в репозитории, скомпилируйте проект спецификаций и запустите веб-приложение из VS перед запуском cmd)
  • с бегуном TD.Net
  • с ReSharper

Им удается во всех трех случаях. Я не работаю как администратор.

Не могли бы вы попытаться воспроизвести ошибку в проекте, указанном выше? Если у вас не установлен Git, в верхнем разделе есть кнопка загрузки.

person Alexander Groß    schedule 11.03.2011
comment
Командная строка работает, а Td.Net - нет - как ни странно, не может найти элементы на странице. Я попробовал запустить командную строку на своем, и он работает, так что я думаю, это мой бегун Td.Net, с которым проблема. У меня последняя версия, и я попытался запустить командный файл InstallTDNetRunner в пакетах \ (mspec) \ tools, но безуспешно. По крайней мере, я знаю, в чем проблема сейчас, поэтому могу продолжить расследование. Спасибо - person Grant Crofton; 14.03.2011
comment
Если вы используете TD.Net ›= 2.24, вам не нужно устанавливать TD.Net runner. Просто убедитесь, что файлы MSpec.tdnet, MSpec.TDNetRunner.dll и MSpec.dll находятся в одной папке. - person Alexander Groß; 15.03.2011
comment
Да, я это понял - я на v3, но все равно это не имело значения. Все находится в нужной папке (моя установлена ​​из NuGet, а ваша была права), но я все равно получаю те же результаты. Он действительно запускает тесты MSpec, похоже, проблема на стороне WatiN. Я пока просто запускаю его из командной строки. Спасибо за помощь - person Grant Crofton; 15.03.2011

System.UnauthorizedAccessException может произойти в ряде обстоятельств. Если страница не загрузилась полностью и вы пытаетесь получить доступ к объекту, а также просто не являетесь нужным пользователем. Я бы начал с отладки скрипта вручную и запустил средство запуска тестов от имени администратора.

Если это сработает, попробуйте комбинации админки и полной скорости, без админки и полной полной скорости, а также админку и отладку. Тогда вы должны хорошо понимать, в чем настоящая проблема. В некоторых редких случаях (с ранними версиями WatiN) мне приходилось заключать вызовы в try-catch, затем обрабатывать это исключение, а затем повторять попытку после короткого ожидания.

person Bruce McLeod    schedule 12.03.2011
comment
Спасибо, но без радости: отладка выдает ту же ошибку в этой строке в IEElementCollection.cs в Watin.Core.dll: '(IHTMLElementCollection) elementCollection.tags (tagName)'. Захват, ожидание, повторная попытка дает тот же результат. - person Grant Crofton; 14.03.2011