我在Visual Studio 2005中使用WatiN测试工具。当我尝试从列表框中选择一个值时,我收到“拒绝访问”错误。
答案 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{}