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

3

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

3个回答

4

最近在使用WatiN 2.0 beta时,我经常遇到选择列表的问题。与其使用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
我注意到如果尝试选择已选择的值,会发生这种情况。
您可以通过预先检查来解决此问题:
if(_sel_ddlPeriodFromDay.GetValue("value")!="1")
   _sel_ddlPeriodFromDay.SelectByValue("1");

或者使用 try catch 呢?

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

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

是的,我知道这样吞掉所有异常通常是不好的,但如果异常再次发生,它会被抛到测试代码中,测试将失败。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接