- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们的目标是:嵌入在 .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
实例。否则,您必须修改此类以避免在读取 Form
的 Handle
属性时发生跨线程操作。
关于webbrowser-control - WatiN 和 .net winforms WebBrowser 控件 - DialogWatcher 可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4455607/
我们的目标是:嵌入在 .net winform 中的支持 Watin 的浏览器测试。 目前,我们正在使用 .net WebBrowser 控件将浏览器行为嵌入到 winform 中。我们使用如下代码将
我是一名优秀的程序员,十分优秀!