将Watin附加到WebBrowser(WPF)

时间:2010-07-13 12:55:31

标签: c# wpf browser watin

我已经浏览了互联网(包括来自这个网站的答案),但似乎没有任何东西可以帮助我。有没有人知道将WatiN附加到WebBrowser实例(Windows Presentation Forms版本)的正确方法?

我读过的大多数答案都告诉我'ActiveXInstance',这在WPF版本的WebBrowser中是看不到的。我已经尝试从WebBrowser文档(http://msdn.microsoft.com/en-us/library/cc491073%28v=VS.90%29.aspx)公开IWebBrowser 2接口,但经过大量的代码结构改造以使其编译,一个简单的WatiN goto(URL语句只是最终超时。

作为最后的手段,我试过

WatiN.Core.Settings.AutoStartDialogWatcher = false;
var browser = new IE(wbrowser);

在loadcompleted事件上(因为如果我将它放在MainWindow()构造函数方法中,浏览器实例将导致null),但是会出现带有消息“iwebBrowser2需要实现shdocvw.IWebBrowser2”的Argument Exception。不幸的是我不知道如何解决这个问题。

2 个答案:

答案 0 :(得分:1)

您可能希望通过窗口句柄附加:

var ie = IE.AttachToIE(Find.By("hwnd", containerHwnd);

答案 1 :(得分:0)

在我为WatiN_IE_ExtensionMethods.cs编写的O2 API中,我能够使用普通的WinForms webbrowser(在另一个WinForm控件或WPF控件中)很好地工作。

由于您可以在WPF中使用WinForm控件(这正是.NET 3.5使用WPF WebBrowser所做的,因为它不是本机WPF控件),这里有一个示例:完全正确Using WatiN to inside WPF

此视频显示了使用此技术的O2脚本:http://www.youtube.com/watch?v=YsVX5-nGHWI

请注意,我编写了一堆Extension方法来使WatiN更容易使用:

var ie = winFormsPanel.add_IE();
ie.open("http://www.google.com");       
ie.link("Videos").flash().click();
ie.field("q").value("OWASP O2 Platform").flash();
ie.button("Search Videos").flash().click();
ie.link("O2 Platform - XSS PoC builder.avi").scrollIntoView().flash().click();