Ошибка доступа запрещена (Visual Studio и WatiN) - PullRequest
3 голосов
/ 06 июня 2009

Я использую инструмент тестирования WatiN с Visual Studio 2005. Когда я пытаюсь выбрать значение из своего списка, я получаю ошибку «Отказано в доступе».

Ответы [ 3 ]

4 голосов
/ 22 июля 2009

Я часто видел это в списках выбора при использовании бета-версии WatiN 2.0. Вместо использования параметра aSelectList.Select (strText), кажется, он работает лучше, когда вы делаете это:

ie.SelectList(Find.ById("MySelect")).Option(Find.ByText("Option 1")).Select();

Это также может произойти при изменении элемента управления ASP.NET, который вызывает автоматическую обратную передачу. Первое изменение будет зарегистрировано, но следующий элемент, к которому вы попытаетесь получить доступ, выдаст ошибку «Отказано в доступе», поскольку он все еще пытается получить доступ к старой странице. В этом случае вы можете попробовать использовать ie.WaitForComplete (), но иногда это требуется:

ie.SelectList(Find.ById("AutoPostBackSelect")).Option(Find.ByText("Option")).Select();
System.Threading.Thread.Sleep(200); //Sleep to make sure post back registers
ie.WaitForComplete();
ie.SelectList(Find.ById("MySelect")).Refresh()
ie.SelectList(Find.ById("MySelect")).Option(Find.ByText("Option 1")).Select();
1 голос
/ 01 сентября 2009

Я заметил, что это происходит, если вы попытаетесь выбрать уже выбранное значение.

Вы можете обойти это с предварительной проверкой:

if(_sel_ddlPeriodFromDay.GetValue("value")!="1")
   _sel_ddlPeriodFromDay.SelectByValue("1");

или, может быть, использовать попытку поймать?

try{_sel_ddlPeriodFromDay.SelectByValue("1");}
catch{}
1 голос
/ 09 июня 2009

Это ошибка в списке выбора, когда список не готов принять входные данные и может выдать несколько типов исключений. Мы решаем это так:

try
{
    _domContainer.SelectList(_control.WatinAttribute).Focus();
    _domContainer.SelectList(_control.WatinAttribute).Select(value);
}

catch (Exception e)
{ 
    Console.WriteLine("Select list eception caught: " + e.Message + e.StackTrace);

    // we have tried once already and failed, so let's wait for half a second
    System.Threading.Thread.Sleep(500);
    _domContainer.SelectList(_control.WatinAttribute).Select(value);
}

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

...