隐藏浏览器弹窗 - Watin

5

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

Settings.Instance.MakeNewIeInstanceVisible = false;

然而,它并不能隐藏弹出窗口(当模拟点击打开弹出窗口的元素时)。 有没有办法隐藏它们?


什么样的弹出窗口?像警告和确认那样的消息框吗?还是使用window.open打开的新窗口? - Christos Lytras
新窗口实际上 - Kira
我通过向使用Watin加载的页面注入一些JavaScript来实现了这个功能。请看一下我的回答。 - Christos Lytras
2个回答

0

我已经检查了发布说明,并发现以下内容:

默认情况下,WatiN测试会使创建的Internet Explorer实例对用户可见。您可以通过更改以下设置来运行您的测试不可见。请注意,即使将此设置设置为false(这是Internet Explorer的默认行为,目前无法抑制),HTMLDialogs和任何弹出窗口也将显示。

IE.Settings.MakeNewIeInstanceVisible = false; // default is true

由于自2011年以来,WatIN没有更新,我认为您不会期望任何新功能支持您想要的。

我不知道这是否可以解决问题,但如果这些弹出窗口对您不是重要的话,为什么不阻止所有弹出窗口呢?

如何通过Watin中的代码关闭弹出窗口拦截器?

HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_WEBOC_POPUPMANAGEMENT
Value = 0 for Off
Value = 1 for On

它们确实很重要:/ - Kira
@HediNaily 嗯,你想要的功能他们没有提供。我认为也许你需要更换你的库。 - Ali Bahrami

0

您可以通过运行一些JavaScript代码并使window.open函数无效来以编程方式完成它!

示例

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

window['open'] = function() { return false; }

要使用 Watin 完成此操作,我们必须使用 Eval 函数并注入以下 JavaScript 代码:

browser.Eval("window['open'] = function() { return false; }");

然后所有弹出窗口仅在该页面加载期间消失,我们获得了想要的结果。

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);
}

在 JavaScript 注入之前运行的程序(弹出窗口显示)

Popup without javascript injection

JavaScript注入后程序运行(弹出窗口已消失)

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接