当前位置: 首页 > 知识库问答 >
问题:

Selenium,使用WebClient在IE中获取文件的例外

安经纶
2023-03-14

我有一个硒测试,应该下载一个文件,并检查它是否包含一些东西。在火狐和Chrome测试运行正常,但在IE 11我得到一个例外。

IE驱动程序:IEDriverServer版本2.41.0.0

代码:

<code>
 var driver = new InternetExplorerDriver();
 //....navigate and login to a page
 var el = driver.FindElements(By.PartialLinkText("Download File"))
                                             .First(p => p.GetAttribute("href").Contains("/downloadmyfile"));
 var link = el.GetAttribute("href");
 var client = new WebClient();
 client.Headers[HttpRequestHeader.Cookie] = CookieString();
 var data = client.DownloadString(new Uri(link));
</code>

复制Cookie的代码:

<code>
  public string CookieString()
    {
        var cookies = driver.Manage().Cookies.AllCookies;
        return string.Join("; ", cookies.Select(c => string.Format("{0}={1}", c.Name, c.Value)));
    }
</code>

例外情况:

  • 消息:基础连接已关闭:接收时发生意外错误
  • InnerException:无法从传输连接读取数据:远程主机强制关闭了现有连接

司机。管理()。饼干。Firefox驱动程序的所有Cookie外观:

ASP.NET_SessionId=sesionId222222; .authcookie=xxxxxxxx; __utma=1.559549671.1404381398.1404381398.1404381398.1; __utmb=1.1.10.1404381398; __utmc=1; __utmz=1.1404381398.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); testingSite=culture=en

司机。管理()。饼干。IE驱动程序的所有Cookie外观:

__utma=1.342629986.1404310901.1404378456.1404381205.3; __utmb=1.2.10.1404381205; __utmc=1; __utmz=1.1404310901.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); testingSite=culture=en

对于相同的网页,IE浏览器的浏览器cookie具有sesionId和. autekie。

有人知道IE driver会出什么问题吗?

我看到IE驱动程序不包含_SessionId的cookie值和. Authcookie有一种方法可以为IE驱动程序获取丢失的cookie吗?

>

  • InnerException堆栈跟踪:

    在系统中。网插座。网络流。在系统上读取(字节[]缓冲区、Int32偏移量、Int32大小)。网固定尺寸阅读器。系统上的ReadPacket(字节[]缓冲区、Int32偏移量、Int32计数)。网安全_SSL流。系统上的StartFrameHeader(字节[]缓冲区、Int32偏移量、Int32
    计数、AsyncProtocolRequest asyncRequest)。网安全_SSL流。在系统上启动(字节[]缓冲区、Int32偏移量、Int32
    计数、AsyncProtocolRequest asyncRequest)。网安全_SSL流。系统上的ProcessRead(字节[]缓冲区、Int32偏移量、Int32计数、AsyncProtocolRequest asyncRequest)。网TlsStream。在系统上读取(字节[]缓冲区、Int32偏移量、Int32大小)。网池流。在系统上读取(字节[]缓冲区、Int32偏移量、Int32大小)。网联系SyncRead(HttpWebRequest请求、布尔userRetrievedStream、布尔probeRead)

    • 异常堆栈跟踪:
    -at System.Net.WebClient.DownloadDataInternal(Uri address, WebRequest& request)
     at System.Net.WebClient.DownloadString(Uri address)
     at MyClasss........
    
  • 共有1个答案

    颜嘉誉
    2023-03-14

    这是因为IE不返回HttpOnly cookies。ASP。NET SessionID是一个仅HttpOnly的cookie。

    我们没有找到解决方案,所以我们转而使用注入页面的JavaScript AJAX请求来执行下载。我们还将结果以编码字符串的形式返回给Selenium,因此我们不会向HDD发送已下载文件的垃圾邮件。

     类似资料:
    • 问题内容: OK,所以我正在尝试使用Selenium导出文件。我的浏览器是IE。当我 单击导出按钮时,将出现一个本机Windows对话框。 弹出的图片 在此处输入图片说明 我必须单击“保存”按钮。为此,我尝试使用AutoIT但 不起作用。 这没有用。因此,我决定使用Robot类并执行键盘单击Atl + S,因为这还将使浏览器能够保存文件。那 也不起作用。 我认为Web驱动程序存在一些问题,因为我尝

    • 我已经使用了下面的代码,将鼠标移到选项卡上,然后选择表中的菜单。鼠标悬停在Firefox上运行良好,但在Chrome和Internet Explorer上不起作用。在选择菜单之前,我们已经选择了iframe。请建议在IE WebDriver中处理鼠标悬停的替代方法我使用了鼠标悬停的操作方法。

    • 问题内容: 我正在尝试使用Selenium WebDriver获取文本,这是我的代码。请注意,我不想使用XPath,因为在我的情况下,每次重新启动网页时ID都会更改。 我的代码: HTML: 我怎样才能解决这个问题? 问题答案: 你只想。 然后,您可以在验证 后 进行验证,不要尝试传递您 期望的 内容。

    • 我试图使用Selenium WebDriver获取文本,这是我的代码。请注意,我不想使用XPath,因为在我的情况下,每次重新启动网页时都会更改ID。 我的代码: HTML: 我怎样才能解决这个问题?

    • 问题内容: 当我单击页面上的按钮(在IE浏览器中)时,将打开一个新的弹出页面。我尝试获取此弹出窗口的窗口句柄失败。这是我的第一次尝试: 此尝试仅打印基本窗口的句柄,并且如果第二个print语句放置在if()语句之外,但在while()语句内以及if()语句之后,则仅输出基本窗口的标题。因此,这组句柄似乎只包含基本窗口句柄。 这是我的第二次尝试: 尝试返回一个错误,该错误表明数组popUpWin为空

    • 有人能帮忙吗 下面是错误,谢谢你的及时回复。 失败:testGooglePageTitleInIEBrowser java.lang.NullPointerException在IEProjects.TesteBrowser.testGooglePageTitleInIEBrowser(TesteBrowser.java:32)在Sun.Reflect.NativeMethodAccessorImp