2010-05-03 5 views
3

Est-ce qu'il y a un moyen qui me permettrait d'utiliser les fonctionnalités de watin à partir du contrôle de mon navigateur web? Je veux simplement utiliser watin avec le contrôle de mon navigateur web Je ne veux pas que mon application ouvre une nouvelle fenêtre, j'en ai besoin dans mon navigateur.Comment utiliser watin avec le contrôle WebBrowser?

Répondre

0

Créez votre objet IE en utilisant une interface WebBrowser2 de contrôle de votre navigateur Web, quelque chose comme:

var CurrentBrowser = new IE(WebBrowser2); 

Un point important est d'être sûr de mettre AutoStartDialogWatcher false dans les paramètres Watin. Puisque vous n'implémentez plus IE, vous êtes responsable de toutes les boîtes de dialogue.

3

Si vous utilisez .Net Control WebBrowser vous pouvez créer un objet IE de Watin en utilisant le code suivant:

var ie = new IE(webBrowser.ActiveXInstance); 

Mais si vous le faites dans votre ActiveXInstance sera nulle. Et si vous faites cela par exemple à l'intérieur d'une sorte de button_Click l'application va se bloquer après avoir utilisé par exemple. ie.GoTo. Vous devez démarrer un nouveau thread et opérer là. Par exemple:

private void Form1_Load(object sender, EventArgs e) 
{ 
    var t = new Thread(() => 
    { 
     Settings.AutoStartDialogWatcher = false; 
     var ie = new IE(webBrowser1.ActiveXInstance); 
     ie.GoTo("http://www.google.com"); 
    }); 
    t.SetApartmentState(ApartmentState.STA); 
    t.Start(); 
} 

Vous devez désactiver le démarrage automatique de veilleur de dialogue, parce que vous ne pouvez pas utiliser construit dans watcher dialogue Watin. Mais avec un peu de piratage, vous pouvez créer votre propre basé sur la classe DialogWatcher originale. La gestion des fenêtres contextuelles et la création de nouveaux contrôles du navigateur Web sont également possibles.

+1

Si vous avez besoin pour gérer les boîtes de dialogue voir ceci: http://stackoverflow.com/questions/4455607/watin-and-net-winforms-webbrowser-control-is-dialogwatcher-possible/ – prostynick

+0

mais webBrowser n'a pas d'attribut nommé "ActiveXInstance". Qu'ai-je fait de mal? –

+0

http://msdn.microsoft.com/fr-fr/library/system.windows.forms.webbrowserbase.activexinstance.aspx – prostynick

2

(post carbone-copie pour faire la mécanique de dialogue-watcher de Watin travaillent avec contrôle WebBrowser sans beaucoup de piratage :))

Il est possible de faire un contrôle WebBrowser intégré pour travailler avec le mécanisme de dialogue de traitement de Watin si vous sont en mesure d'obtenir la poignée de fenêtre du contrôle WebBrowser, qui devrait être tout à fait possible si vous écrivez le code de la forme qui le contient (1)

la raison pour laquelle vous avez besoin de cette poignée de fenêtre est exactement parce que Watin ne récupérez-le au moyen de la propriété IWebBrowser2.HWND - c'est à prévoir. En note, j'ai rencontré un comportement problématique et erratique de la part de IWebBrowser2.HWND, même en traitant avec IE de Microsoft - donc une raison de plus de suivre la méthode décrite ci-dessous pour contourner ces problèmes HWND. Une fois que vous mettez la main sur la poignée de la fenêtre du contrôle webbrowser, vous pouvez simplement créer une classe proxy qui entoure l'interface IWebBrowser2 du navigateur Web intégré (à l'exception de HWND) afin de contourner le problème. Mettre le tout ensemble, vous pouvez maintenant écrire:

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

Hope this helps. Oh, et voici la classe proxy que vous aurez besoin:

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: Même si vous ne vous avez pas accès code source à une telle forme parce que, par exemple, le contrôle WebBrowser est dans une application 3ème partie qui vous n'avez pas accès à, vous pouvez écrire une petite fonction utilitaire pour analyser toutes les fenêtres jusqu'à ce que vous tombiez sur l'application tierce qui contient le contrôle webbrowser que vous recherchez. Vous pouvez jeter un oeil dans le code source de WatiN, à l'intérieur de ShellWindows2.CollectInternetExplorerInstances() pour avoir une idée sur la façon dont vous pouvez implémenter une telle fonction d'analyse.

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

Questions connexes