2009-04-22 137 views
2

使用WatiN捕捉图像时,生成的图像仅为空白,为纯黑色。不过,图像的大小等于屏幕大小。例如,以下代码片段仅保存两张黑色图片。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

您正在使用哪种版本的IE和WatiN? – 2009-04-24 13:05:42

回答

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并呼吁它。