gpt4 book ai didi

webbrowser-control - WatiN 和 .net winforms WebBrowser 控件 - DialogWatcher 可能吗?

转载 作者:行者123 更新时间:2023-12-02 13:57:35 26 4
gpt4 key购买 nike

我们的目标是:嵌入在 .net winform 中的支持 Watin 的浏览器测试。

目前,我们正在使用 .net WebBrowser 控件将浏览器行为嵌入到 winform 中。我们使用如下代码将 WatiN 附加到表单上的 WebBroswer 控件(感谢 prostynick):

var thread = new Thread(() =>
{
Settings.AutoStartDialogWatcher = false;
var ie = new IE(webBrowser1.ActiveXInstance);
ie.GoTo("http://www.google.com");
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();

问题是这样的 - “winform 浏览器”需要在测试/自动化期间处理弹出窗口。

问题:当 Watin 附加到 winforms webBrowser 控件(并且不使用其自己的 WatiN 生成的 IE 窗口)时,如何处理弹出窗口?
a) Watin 的 DialogWatcher 还能用吗?如果是这样...怎么办?
b) 如果没有,那么也许我们可以编写自己的 DialogWatcher —— 但我们需要一个 hWnd 或 processID 来添加它。在 Waitin 没有自己的窗口或进程的情况下,我们从哪里可以获得正确的 hWnd 或 processId?

提前感谢您提供任何想法...欢迎达到相同目标的替代方法!

最佳答案

我刚刚升级到最新版本的 WatiN(头部修订版 - 1166 - 在主干中: https://watin.svn.sourceforge.net/svnroot/watin/trunk/src/ )。由于原始 DialogWatcher 类发生了变化,现在可以通过更少的代码使用现有的 DialogWatcher

创建类:

public class WebBrowserIE : IE
{
private IntPtr hwnd;

public WebBrowserIE(WebBrowser webBrowserControl)
: base(webBrowserControl.ActiveXInstance, false)
{
hwnd = webBrowserControl.FindForm().Handle;
StartDialogWatcher();
}

public override IntPtr hWnd
{
get
{
return hwnd;
}
}

protected override void Dispose(bool disposing)
{
hwnd = IntPtr.Zero;
base.Dispose(disposing);
}
}

使用它代替原始的 IE 类并查看消失的 javascript 警报对话框:

var ie = new WebBrowserIE(webBrowser1);
var thread = new Thread(() =>
{
ie.GoTo("http://www.plus2net.com/javascript_tutorial/window-alert.php");
ie.Button(Find.ByValue("Click here to display alert message")).Click();
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();

警告:在线程外创建 WebBrowserIE 实例。否则,您必须修改此类以避免在读取 FormHandle 属性时发生跨线程操作。

关于webbrowser-control - WatiN 和 .net winforms WebBrowser 控件 - DialogWatcher 可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4455607/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com