本文介绍了WatiN 生成空页的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用 WatiN 捕获图像时,生成的图像只是空的、纯黑色的.不过,图像的大小等于屏幕大小.例如,以下代码段仅保存两个黑色图像.

When capturing images using WatiN the resulting images are just empty, solid black. The size of the images equals the screen size, though. For example the following snippet just saves two black images.

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&噪声=3&sort=Position&view=Quick&fr=51&select=1810490

Other have reported this as well but I haven't seen any solution. See comments here: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

希望任何人都可以对此有所了解.

Hope any can shed some light on this.

干杯//约翰

推荐答案

通过以下更改,我设法让它在 IE8 下的网页上工作:

I managed to get it working for my web pages under IE8 with the following changes:

替换以下方法:

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 及其调用.

Remove the method GetHwndContainingAShellDocObjectView and the call to it.

这篇关于WatiN 生成空页的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-02 23:38