有什么方法可以让我使用网络浏览器控件中的watin功能吗?我想用我的网页浏览器控件使用watin我不希望我的应用程序打开一个新窗口,我需要在我的网页浏览器控件中使用它。
答案 0 :(得分:3)
如果您使用.Net WebBrowser Control,则可以使用以下代码创建WatiN的IE
对象:
var ie = new IE(webBrowser.ActiveXInstance);
但如果您在Form_Load
ActiveXInstance
内执行该操作,则该操作将为空。如果你这样做,例如在某种button_Click
内,应用程序将在你使用eg之后挂起。 ie.GoTo
。您需要启动新线程并在那里运行。例如:
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();
}
您需要禁用对话框观察器的自动启动,因为您无法使用内置的WatiN对话框观察器。但是,通过一些黑客攻击,您可以基于原始DialogWatcher
类创建自己的。处理弹出窗口和创建新的Web浏览器控件也是可能的。
答案 1 :(得分:2)
(用于使WatiN的对话观察者机制与webbrowser控件一起工作的碳复制帖子没有太多黑客攻击:))
如果你能够获得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 :(得分:0)
使用Web浏览器控件中的WebBrowser2界面创建IE对象,如:
var CurrentBrowser = new IE(WebBrowser2);
重要的一点是确保在WatiN设置中将AutoStartDialogWatcher
设置为false。由于您不再实施IE,因此您负责所有对话框。