使用WatiN拍摄图像时,生成的图像只是空的,纯黑色。但是,图像的大小等于屏幕大小。例如,以下代码段只保存了两张黑色图片。
using (IE ie = new IE()) {
ie.ClearCache();
ie.BringToFront();
ie.GoTo("http://localhost/");
ie.CaptureWebPageToFile(imageDir + "\\localhost.png");
WatiN.Core.CaptureWebPage capture = new CaptureWebPage(ie);
capture.CaptureWebPageToFile(imageDir + "\\localhost.jpg", true, true, 100, 80);
Assert.IsTrue(ie.ContainsText("Zend"));
}
其他人也报道了这一点,但我没有看到任何解决方案。看这里的评论: http://www.codeproject.com/KB/graphics/IECapture.aspx?display=PrintAll&fid=192174&df=90&mpp=25&noise=3&sort=Position&view=Quick&fr=51&select=1810490
希望任何人都能对此有所了解。
干杯 //约翰
答案 0 :(得分:3)
我设法让它在IE8下的网页上工作,并进行了以下更改:
替换以下方法:
private static IntPtr GetHwndForInternetExplorerServer(IntPtr hwnd)
{
var sbc = new StringBuilder(256);
hwnd = NativeMethods.GetWindow(hwnd, NativeMethods.GW_CHILD);
while (hwnd != IntPtr.Zero)
{
NativeMethods.GetClassName(hwnd, sbc, 256);
if (sbc.ToString().IndexOf("Shell DocObject View", 0) > -1) //IE6
{
hwnd = NativeMethods.FindWindowEx(hwnd, IntPtr.Zero, "Internet Explorer_Server", IntPtr.Zero);
break;
}
if (sbc.ToString().IndexOf("TabWindowClass", 0) > -1) //IE7
{
hwnd = NativeMethods.FindWindowEx(hwnd, IntPtr.Zero, "Shell DocObject View", IntPtr.Zero);
hwnd = NativeMethods.FindWindowEx(hwnd, IntPtr.Zero, "Internet Explorer_Server", IntPtr.Zero);
break;
}
if (sbc.ToString().IndexOf("Frame Tab", 0) > -1) // IE8
{
hwnd = NativeMethods.FindWindowEx(hwnd, IntPtr.Zero, "TabWindowClass", IntPtr.Zero);
hwnd = NativeMethods.FindWindowEx(hwnd, IntPtr.Zero, "Shell DocObject View", IntPtr.Zero);
hwnd = NativeMethods.FindWindowEx(hwnd, IntPtr.Zero, "Internet Explorer_Server", IntPtr.Zero);
break;
}
hwnd = NativeMethods.GetWindow(hwnd, NativeMethods.GW_HWNDNEXT);
}
return hwnd;
}
删除方法GetHwndContainingAShellDocObjectView及其调用。