watin attachto嵌入式浏览器

时间:2010-03-10 19:06:59

标签: c# browser controls watin embedded-browser

我有一个使用watin的c#windows表单项目。

我很想附加到表单上的Web浏览器控件,这可能吗?是否有关于如何附加到嵌入式Web浏览器控件的示例代码。

//Looks like this only works for actual IExplorer instances.
window = WatiN.Core.Browser.AttachTo<WatiN.Core.IE>(WatiN.Core.Find.ByTitle("Google"));

5 个答案:

答案 0 :(得分:1)

也许我在这里遗漏了一些东西,但是你不能使用WebBrowser控件并将它附加到WinForms应用程序吗?

答案 1 :(得分:1)

对我而言,它给出了错误。

WatiN.Core.Exceptions.TimeoutException未处理   Message =“Internet Explorer忙时超时”   源= “WatiN.Core”

答案 2 :(得分:0)

是的,您可以使用WebBrowser控件,但有一些技巧。

关键是因为您的应用程序提供了对话框(而不是IE),您必须将Settings对象属性AutoStartDialogWatcher设置为false。否则,您将无法进行附件,因为对话框观察器窗口句柄无效。

我建议使用类似的东西: IE newbrowser = new WatiN.Core.IE(embeddedbrowser.IWebBrowser2);

...当然IWebBrowser2属性名称将根据您使用的库而改变。

答案 3 :(得分:0)

这是我用来附加到Embeded Web Browser Control的代码:

WatiN.Core.IE window = null;
WatiN.Core.Settings.AutoStartDialogWatcher = false;
window = new WatiN.Core.IE(webBrowser1.ActiveXInstance);

答案 4 :(得分:0)

如果你能够获得web浏览器控件的窗口句柄,可以使嵌入式web浏览器控件与WatiN的Dialog处理机制一起使用,如果你正在编写,这应该是完全可能的包含它的表单的代码(1)

您需要此窗口句柄的原因正是因为WatiN无法通过IWebBrowser2.HWND属性检索它 - 这是可以预期的。 (2)

作为旁注,即使在处理微软的IE时,我也遇到了IWebBrowser2.HWND属性的问题和不稳定行为 - 所以还有一个理由要遵循下面列出的方法解决此类HWND问题。

一旦你掌握了webbrowser控件的窗口句柄,就可以简单地创建一个包含嵌入式Web浏览器的IWebBrowser2接口的代理类(HWND除外),以便解决问题。把它们放在一起你现在可以写:

 Settings.AutoStartDialogWatcher = true;
 new IE(new ProxyForIWebBrowser2InterfaceToWorkaroundHWNDBugs((IWebBrowser2) webBrowser1.ActiveXInstance, webBrowser1.Handle), true);

希望这会有所帮助。哦,这是你需要的代理类:

 using System;
 using SHDocVw;

 namespace WatiN.Core.Native.InternetExplorer
 {
public class ProxyForIWebBrowser2InterfaceToWorkaroundHWNDBugs : IWebBrowser2
{
    #region Implementation of IWebBrowser
    private readonly int _ExplicitHwndForIWebBrowser2;
    private readonly IWebBrowser2 _EmbeddedWebBrowserAsIWebBrowser2;
    public ProxyForIWebBrowser2InterfaceToWorkaroundHWNDBugs(IWebBrowser2 embeddedWebBrowserAsIWebBrowser2, IntPtr explicitHwnd)
    {
        _EmbeddedWebBrowserAsIWebBrowser2 = embeddedWebBrowserAsIWebBrowser2;
        _ExplicitHwndForIWebBrowser2 = (int)explicitHwnd;
    }

    void IWebBrowser.GoBack()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.GoBack();
    }

    void IWebBrowser2.GoForward()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.GoForward();
    }

    void IWebBrowser2.GoHome()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.GoHome();
    }

    void IWebBrowser2.GoSearch()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.GoSearch();
    }

    void IWebBrowser2.Navigate(string URL, ref object Flags, ref object TargetFrameName, ref object PostData, ref object Headers)
    {
        _EmbeddedWebBrowserAsIWebBrowser2.Navigate(URL, ref Flags, ref TargetFrameName, ref PostData, ref Headers);
    }

    void IWebBrowser2.Refresh()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.Refresh();
    }

    void IWebBrowser2.Refresh2(ref object Level)
    {
        _EmbeddedWebBrowserAsIWebBrowser2.Refresh2(ref Level);
    }

    void IWebBrowser2.Stop()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.Stop();
    }

    object IWebBrowser2.Application
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Application; }
    }

    object IWebBrowser2.Parent
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Parent; }
    }

    object IWebBrowser2.Container
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Container; }
    }

    object IWebBrowser2.Document
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Document; }
    }

    bool IWebBrowser2.TopLevelContainer
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.TopLevelContainer; }
    }

    string IWebBrowser2.Type
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Type; }
    }

    int IWebBrowser2.Left
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Left; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.Left = value; }
    }

    int IWebBrowser2.Top
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Top; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.Top = value; }
    }

    int IWebBrowser2.Width
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Width; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.Width = value; }
    }

    int IWebBrowser2.Height
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Height; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.Height = value; }
    }

    void IWebBrowser2.Quit()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.Quit();
    }

    void IWebBrowser2.ClientToWindow(ref int pcx, ref int pcy)
    {
        _EmbeddedWebBrowserAsIWebBrowser2.ClientToWindow(ref pcx, ref pcy);
    }

    void IWebBrowser2.PutProperty(string Property, object vtValue)
    {
        _EmbeddedWebBrowserAsIWebBrowser2.PutProperty(Property, vtValue);
    }

    object IWebBrowser2.GetProperty(string Property)
    {
        return _EmbeddedWebBrowserAsIWebBrowser2.GetProperty(Property);
    }

    public void Navigate2(ref object URL, ref object Flags, ref object TargetFrameName, ref object PostData, ref object Headers)
    {
        _EmbeddedWebBrowserAsIWebBrowser2.Navigate2(ref URL, ref Flags, ref TargetFrameName, ref PostData, ref Headers);
    }

    public OLECMDF QueryStatusWB(OLECMDID cmdID)
    {
        return _EmbeddedWebBrowserAsIWebBrowser2.QueryStatusWB(cmdID);
    }

    public void ExecWB(OLECMDID cmdID, OLECMDEXECOPT cmdexecopt, ref object pvaIn, ref object pvaOut)
    {
        _EmbeddedWebBrowserAsIWebBrowser2.ExecWB(cmdID, cmdexecopt, ref pvaIn, ref pvaOut);
    }

    public void ShowBrowserBar(ref object pvaClsid, ref object pvarShow, ref object pvarSize)
    {
        _EmbeddedWebBrowserAsIWebBrowser2.ShowBrowserBar(ref pvaClsid, ref pvarShow, ref pvarSize);
    }

    void IWebBrowser2.GoBack()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.GoBack();
    }

    void IWebBrowserApp.GoForward()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.GoForward();
    }

    void IWebBrowserApp.GoHome()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.GoHome();
    }

    void IWebBrowserApp.GoSearch()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.GoSearch();
    }

    void IWebBrowserApp.Navigate(string URL, ref object Flags, ref object TargetFrameName, ref object PostData, ref object Headers)
    {
        _EmbeddedWebBrowserAsIWebBrowser2.Navigate(URL, ref Flags, ref TargetFrameName, ref PostData, ref Headers);
    }

    void IWebBrowserApp.Refresh()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.Refresh();
    }

    void IWebBrowserApp.Refresh2(ref object Level)
    {
        _EmbeddedWebBrowserAsIWebBrowser2.Refresh2(ref Level);
    }

    void IWebBrowserApp.Stop()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.Stop();
    }

    object IWebBrowserApp.Application
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Application; }
    }

    object IWebBrowserApp.Parent
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Parent; }
    }

    object IWebBrowserApp.Container
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Container; }
    }

    object IWebBrowserApp.Document
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Document; }
    }

    bool IWebBrowserApp.TopLevelContainer
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.TopLevelContainer; }
    }

    string IWebBrowserApp.Type
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Type; }
    }

    int IWebBrowserApp.Left
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Left; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.Left = value; }
    }

    int IWebBrowserApp.Top
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Top; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.Top = value; }
    }

    int IWebBrowserApp.Width
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Width; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.Width = value; }
    }

    int IWebBrowserApp.Height
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Height; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.Height = value; }
    }

    void IWebBrowserApp.Quit()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.Quit();
    }

    void IWebBrowserApp.ClientToWindow(ref int pcx, ref int pcy)
    {
        _EmbeddedWebBrowserAsIWebBrowser2.ClientToWindow(ref pcx, ref pcy);
    }

    void IWebBrowserApp.PutProperty(string Property, object vtValue)
    {
        _EmbeddedWebBrowserAsIWebBrowser2.PutProperty(Property, vtValue);
    }

    object IWebBrowserApp.GetProperty(string Property)
    {
        return _EmbeddedWebBrowserAsIWebBrowser2.GetProperty(Property);
    }

    void IWebBrowserApp.GoBack()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.GoBack();
    }

    void IWebBrowser.GoForward()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.GoForward();
    }

    void IWebBrowser.GoHome()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.GoHome();
    }

    void IWebBrowser.GoSearch()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.GoSearch();
    }

    void IWebBrowser.Navigate(string URL, ref object Flags, ref object TargetFrameName, ref object PostData, ref object Headers)
    {
        _EmbeddedWebBrowserAsIWebBrowser2.Navigate(URL, ref Flags, ref TargetFrameName, ref PostData, ref Headers);
    }

    void IWebBrowser.Refresh()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.Refresh();
    }

    void IWebBrowser.Refresh2(ref object Level)
    {
        _EmbeddedWebBrowserAsIWebBrowser2.Refresh2(ref Level);
    }

    void IWebBrowser.Stop()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.Stop();
    }

    object IWebBrowser.Application
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Application; }
    }

    object IWebBrowser.Parent
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Parent; }
    }

    object IWebBrowser.Container
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Container; }
    }

    object IWebBrowser.Document
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Document; }
    }

    bool IWebBrowser.TopLevelContainer
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.TopLevelContainer; }
    }

    string IWebBrowser.Type
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Type; }
    }

    int IWebBrowser.Left
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Left; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.Left = value; }
    }

    int IWebBrowser.Top
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Top; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.Top = value; }
    }

    int IWebBrowser.Width
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Width; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.Width = value; }
    }

    int IWebBrowser.Height
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Height; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.Height = value; }
    }

    string IWebBrowser.LocationName
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.LocationName; }
    }

    string IWebBrowser2.LocationURL
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.LocationURL; }
    }

    bool IWebBrowser2.Busy
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Busy; }
    }

    string IWebBrowser2.Name
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Name; }
    }

    int IWebBrowser2.HWND
    {
        get { return _ExplicitHwndForIWebBrowser2; }
    }

    string IWebBrowser2.FullName
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.FullName; }
    }

    string IWebBrowser2.Path
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Path; }
    }

    bool IWebBrowser2.Visible
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Visible; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.Visible = value; }
    }

    bool IWebBrowser2.StatusBar
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.StatusBar; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.StatusBar = value; }
    }

    string IWebBrowser2.StatusText
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.StatusText; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.StatusText = value; }
    }

    int IWebBrowser2.ToolBar
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.ToolBar; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.ToolBar = value; }
    }

    bool IWebBrowser2.MenuBar
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.MenuBar; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.MenuBar = value; }
    }

    bool IWebBrowser2.FullScreen
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.FullScreen; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.FullScreen = value; }
    }

    public tagREADYSTATE ReadyState
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.ReadyState; }
    }

    public bool Offline
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Offline; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.Offline = value; }
    }

    public bool Silent
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Silent; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.Silent = value; }
    }

    public bool RegisterAsBrowser
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.RegisterAsBrowser; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.RegisterAsBrowser = value; }
    }

    public bool RegisterAsDropTarget
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.RegisterAsDropTarget; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.RegisterAsDropTarget = value; }
    }

    public bool TheaterMode
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.TheaterMode; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.TheaterMode = value; }
    }

    public bool AddressBar
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.AddressBar; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.AddressBar = value; }
    }

    public bool Resizable
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Resizable; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.Resizable = value; }
    }

    string IWebBrowser2.LocationName
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.LocationName; }
    }

    string IWebBrowserApp.LocationURL
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.LocationURL; }
    }

    bool IWebBrowserApp.Busy
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Busy; }
    }

    string IWebBrowserApp.Name
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Name; }
    }

    int IWebBrowserApp.HWND
    {
        get { return _ExplicitHwndForIWebBrowser2; }
    }

    string IWebBrowserApp.FullName
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.FullName; }
    }

    string IWebBrowserApp.Path
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Path; }
    }

    bool IWebBrowserApp.Visible
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Visible; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.Visible = value; }
    }

    bool IWebBrowserApp.StatusBar
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.StatusBar; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.StatusBar = value; }
    }

    string IWebBrowserApp.StatusText
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.StatusText; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.StatusText = value; }
    }

    int IWebBrowserApp.ToolBar
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.ToolBar; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.ToolBar = value; }
    }

    bool IWebBrowserApp.MenuBar
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.MenuBar; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.MenuBar = value; }
    }

    bool IWebBrowserApp.FullScreen
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.FullScreen; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.FullScreen = value; }
    }

    string IWebBrowserApp.LocationName
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.LocationName; }
    }

    string IWebBrowser.LocationURL
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.LocationURL; }
    }

    bool IWebBrowser.Busy
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Busy; }
    }

    #endregion
       }
   }

1:即使你没有这种形式的源代码访问权限,因为,例如,webbrowser控件位于你无法访问的第三方应用程序中,你可以编写一个小实用程序函数来扫描所有Windows,直到你偶然发现包含你所追求的webbrowser控件的第三方应用程序。您可以在ShellWindows2.CollectInternetExplorerInstances()中查看WatiN的源代码,以了解如何实现这样的扫描功能。

2:http://support.microsoft.com/kb/244310