隐藏浏览器弹出窗口 - Watin

Kir*_*ira 5 c# watin popup

我在Windows窗体应用程序中使用Watin库.为了隐藏浏览器,我使用以下指令:

Settings.Instance.MakeNewIeInstanceVisible = false;
Run Code Online (Sandbox Code Playgroud)

但是,它不会隐藏弹出窗口(当模拟单击打开弹出窗口的元素时).有没有办法隐藏它们?

Chr*_*ras 0

您可以通过运行一些 JavaScript 代码并让函数window.open不执行任何操作来以编程方式完成此操作!

例子

是我制作的一个测试页面,它具有非常简单的形式,当用户单击Sum按钮时,它会求和numA+numB并将结果显示在<span id="result"></span>元素内。结果文本更新后,它通过调用打开一个弹出窗口window.open。为了让这个弹出窗口消失,我们需要消除这个window.open函数:

window['open'] = function() { return false; }
Run Code Online (Sandbox Code Playgroud)

要使用 Watin 来做到这一点,我们必须使用该Eval函数并注入 JavaScript 代码,如下所示:

browser.Eval("window['open'] = function() { return false; }");
Run Code Online (Sandbox Code Playgroud)

然后,仅针对该页面加载的所有弹出窗口都消失了,我们就得到了想要的结果。

示例 C# 代码

private void buttonPopupdEnabled_Click(object sender, EventArgs e)
{

    WatiN.Core.Settings.Instance.MakeNewIeInstanceVisible = false;
    IE ie = new IE();

    ie.GoTo("http://zikro.gr/dbg/html/watin-disable-popups/");
    ie.Eval("window['open'] = function() { return false; }");
    ie.TextField(Find.ById("numA")).TypeText("15");
    ie.TextField(Find.ById("numB")).TypeText("21");
    ie.Button(Find.ById("sum")).Click();
    string result = ie.Span(Find.ById("result")).Text;
    ie.Close();

    labelResult.Text = String.Format("The result is {0}", result);
}
Run Code Online (Sandbox Code Playgroud)

程序在 javascript 注入之前运行(弹出窗口出现)

没有 javascript 注入的弹出窗口

javascript 注入后运行的程序(弹出窗口消失了)

在此输入图像描述