我正在使用Visual Studio 2005中的WatiN测试工具。当我尝试从列表框中选择一个值时,我会收到一个“访问被拒绝”的错误。
我正在使用Visual Studio 2005中的WatiN测试工具。当我尝试从列表框中选择一个值时,我会收到一个“访问被拒绝”的错误。
最近在使用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();
if(_sel_ddlPeriodFromDay.GetValue("value")!="1")
_sel_ddlPeriodFromDay.SelectByValue("1");
或者使用 try catch 呢?
try{_sel_ddlPeriodFromDay.SelectByValue("1");}
catch{}
这是选择列表中的一个错误,如果列表尚未准备好接受输入,则可能会抛出多种异常类型。我们可以像这样解决它:
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);
}
是的,我知道这样吞掉所有异常通常是不好的,但如果异常再次发生,它会被抛到测试代码中,测试将失败。