访问被拒绝错误(Visual Studio和WatiN)

时间:2009-06-06 06:55:07

标签: visual-studio watin

我在Visual Studio 2005中使用WatiN测试工具。当我尝试从列表框中选择一个值时,我收到“拒绝访问”错误。

3 个答案:

答案 0 :(得分:4)

在使用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 :(得分:1)

这是选择列表中的一个错误,如果列表尚未准备好接受输入,则它可以抛出一些异常类型。我们这样解决:

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);
}

是的,我知道吞下这样的所有异常通常都是不好的,但是如果再次发生异常,则会抛出测试代码并且测试失败。

答案 2 :(得分:1)

我注意到如果您尝试选择已经选择的值,就会发生这种情况。

您可以通过预先检查解决此问题:

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

或者可以使用try catch?

try{_sel_ddlPeriodFromDay.SelectByValue("1");}
catch{}