C# 绕过System.UnauthorizedAccessException:访问被拒绝

C# 绕过System.UnauthorizedAccessException:访问被拒绝,c#,internet-explorer-8,watin,C#,Internet Explorer 8,Watin,我使用的是Waitin RC2、WatiN-2.0.20.1089、Windows XP操作系统和带VS2008的IE8以及NUnit-2.5.7.10213。我已经将这些站点添加到信任列表中,我有线程睡眠,我尝试过“WaitForComplete”。然而,当脚本“返回”时,我仍然得到一个未经授权的访问异常。 这是我的一段代码,尽管大多数代码都在try-catch块中,但从不捕获异常 公共字符串findallinks() { /* *此函数用于查找和使用给定页面上的所有链接。 *点击一个链接后,

我使用的是Waitin RC2、WatiN-2.0.20.1089、Windows XP操作系统和带VS2008的IE8以及NUnit-2.5.7.10213。我已经将这些站点添加到信任列表中,我有线程睡眠,我尝试过“WaitForComplete”。然而,当脚本“返回”时,我仍然得到一个未经授权的访问异常。 这是我的一段代码,尽管大多数代码都在try-catch块中,但从不捕获异常

公共字符串findallinks()

{
/*
*此函数用于查找和使用给定页面上的所有链接。
*点击一个链接后,它会在页面上等待400毫秒,因此页面
*有一些时间加载,然后功能“点击后退按钮”重置
*转到原始页面。
*此函数不是递归函数。
*/
字符串消息=”;
布尔标志=真;
//从浏览器实例获取所有链接的列表
foreach(browserInstance.Links中的链接)
{
系统线程线程睡眠(1000);
控制台写入线(链接);
尝试
{//单击链接以确保它指向某个地方
link.Click();//如果单击失败,我们将退出try块,而不执行接下来的两个命令。
//控制台写入线(链接);
}
捕获(例外)
{//OOPs我们有一个错误,让我们记录一条消息。
message=message+“未找到标题为“+link+”的链接,或者该链接不起作用。\n”;
flag=false;
}
国际单项体育联合会(旗)
{
系统线程线程睡眠(1000);
//browserInstance.WaitForComplete;
请尝试{browserInstance.Back();}
捕获(未经授权的访问例外)
{
//无所事事
}
}//关闭if标志
}//各关
//回信
返回(消息);
}//闭合函数
[状态线程]
[测试]
公共void TestTitleHomePage()
{
bool testPassed=false;
if(browserInstance.Title.Contains(“”)
{
字符串消息=FindAllinks();
如果(message==“”){testPassed=true;}
}//关闭如果
else{message=“标题不一样。”;}
IsTrue(testPassed,message);
}//结束测试标题主页

我尝试了你的代码,也遇到了异常。我想我知道会发生什么。当您第一次执行
Browser.Links
时,您将获得当前页面的所有链接,然后导航到另一个页面并返回到第一个页面,但对于WatiN来说,这是一个新页面。因此,枚举无法工作,因为您通过第一页的链接进行枚举

我建议您可以获取所有链接的Uri,然后在新浏览器中逐个尝试

IEnumerable<Uri> uris = Browser.Links.Select(l => l.Uri);
foreach(Uri uri in Uris)
{
   try 
   {
      using(var browser = new IE(uri))
      {
          // do nothing or detect 404, 403, etc errors
      }

      // no error
   }
   catch(exception)
   {
      // log error
   }
}
IEnumerable Uri=Browser.Links.Select(l=>l.Uri);
foreach(Uri中的Uri)
{
尝试
{
使用(var浏览器=新IE(uri))
{
//不执行任何操作或检测404、403等错误
}
//无误
}
捕获(例外)
{
//日志错误
}
}

谢谢。我想我可能需要在新浏览器中创建每个链接,但不知道如何才能做到。欢迎您。但是我担心try{}catch(){}不足以检测链接是否断开。例如,404错误在大多数情况下不会触发任何异常,因此您需要手动检查它。这与错误500相同,因为服务器无论如何都将提供一个页面。因此,您应该测试页面结果。(见附件)。如果你喜欢我的答案,请把它标记为正确:)+1如果@KLA保持在同一个浏览器中,链接会改变,但你必须得到新的链接。这种新的浏览器方式应该可以解决这个问题。顺便说一句,我没有接受答案的礼节,但也没有接受答案的礼节。我猜这是个新手。
IEnumerable<Uri> uris = Browser.Links.Select(l => l.Uri);
foreach(Uri uri in Uris)
{
   try 
   {
      using(var browser = new IE(uri))
      {
          // do nothing or detect 404, 403, etc errors
      }

      // no error
   }
   catch(exception)
   {
      // log error
   }
}