我有一个Selenium测试应该下载一个文件并检查它是否包含某些内容。测试在Firefox和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>
例外:
用于Firefox驱动程序的driver.Manage()。Cookies.AllCookies:
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驱动程序的driver.Manage()。Cookies.AllCookies:
__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有sessionId和.authcookie。
任何人都有一个线索关于IE驱动程序可能出现什么问题?
我看到IE驱动程序不包含_SessionId和.authcookie的cookie值 有一种方法可以获取IE驱动程序丢失的cookie吗?
InnerException StackTrace:
在System.Net.Sockets.NetworkStream.Read(Byte []缓冲区,Int32偏移量,Int32大小) 在System.Net.FixedSizeReader.ReadPacket(Byte []缓冲区,Int32偏移量,Int32计数) 在System.Net.Security._SslStream.StartFrameHeader(Byte []缓冲区,Int32偏移量,Int32
count,AsyncProtocolRequest asyncRequest) 在System.Net.Security._SslStream.StartReading(Byte []缓冲区,Int32偏移量,Int32
count,AsyncProtocolRequest asyncRequest) 在System.Net.Security._SslStream.ProcessRead(Byte []缓冲区,Int32偏移量,Int32计数, AsyncProtocolRequest asyncRequest) 在System.Net.TlsStream.Read(Byte []缓冲区,Int32偏移量,Int32大小) 在System.Net.PooledStream.Read(Byte []缓冲区,Int32偏移量,Int32大小) 在System.Net.Connection.SyncRead(HttpWebRequest请求,布尔userRetrievedStream, Boolean probeRead)
-at System.Net.WebClient.DownloadDataInternal(Uri address, WebRequest& request) at System.Net.WebClient.DownloadString(Uri address) at MyClasss........
答案 0 :(得分:1)
这是因为IE不返回HttpOnly cookie。 ASP.NET SessionID是一个HttpOnly cookie。
我们找不到任何解决方案,因此我们切换到使用我们注入页面的JavaScript-AJAX请求执行下载。我们还将结果作为编码字符串返回给Selenium,因此我们不会使用下载的文件向HDD发送垃圾邮件。