Selenium WebDriver如何关闭浏览器弹出窗口

时间:2011-07-28 00:09:22

标签: selenium webdriver

我正在使用selenium webDriver为Web应用程序编写测试,并且遇到了一个场景,当我尝试关闭浏览器时,我会看到一个弹出窗口“你确定吗?页面要求你确认你要离开 - 输入的数据将丢失。“有2个按钮:离开页面和留在页面

如何点击这些按钮?

9 个答案:

答案 0 :(得分:24)

 ( ( JavascriptExecutor ) _driver )
            .executeScript( "window.onbeforeunload = function(e){};" );

为我解决了这个问题

答案 1 :(得分:16)

IAlert alert = driver.SwitchTo().Alert();

alert.Accept(); //for two buttons, choose the affirmative one
// or
alert.Dismiss(); //to cancel the affirmative decision, i.e., pop up will be dismissed and no action will take place

答案 2 :(得分:11)

您可以使用Alert API与警报等进行互动。切换到警报并确认它看起来像这样(在Java中):

Alert alert = driver.switchTo().alert();
alert.accept();

Selenium FAQ中也对此进行了解释。

答案 3 :(得分:6)

def close_all_popups(driver):
    driver.window_handles
    for h in driver.window_handles[1:]:
        driver.switch_to_window(h)
        driver.close()
    driver.switch_to_window(driver.window_handles[0])

答案 4 :(得分:1)

不确定您使用的弹出窗口的结构是什么。 如果您使用了哪个弹出窗口,可以使用以下几个。

如果是警报。你可以尝试:

driver.SwitchTo().Alert()

如果它弹出一个窗口:

driver.SwitchTo().Window(<windowname>)

对于iFrame:

driver.SwitchTo().Frame("iFrmLinks")

一旦你完成了三个中的任何一个,你就可以访问它的所有内部元素。

此致 塔希尔

答案 5 :(得分:1)

您可以尝试使用键盘事件。所以一旦窗口弹出:

选择“确定”按钮。

driver.Keyboard.PressKey(Keys.Tab);

你必须四处看看需要多少次按Tab键。

然后命中空间。

driver.Keyboard.PressKey(Keys.Space);

是的,这是一种黑客行为,但WebDriver还很不成熟。

编辑:这将适用于“真正的”弹出窗口,但正如另一个回答者所说,也许不是因为奇怪的页面内容。基本上,如果您可以手动选中关闭按钮,则此方法应该可以正常工作。

答案 6 :(得分:0)

当我拥有字段形式时,我遇到了同样的问题,并且#34;完成编辑&#34;提交按钮,因为当Selenium IDE自动点击javascript函数时,负责禁用确认窗口(离开页面或仍在其上),它不需要&#34; mouseup&#34;鼠标事件,表示window.confirm仍然有效,自动通过测试失败。在这种情况下,我的解决方案是覆盖javascript函数 window.onbeforeunload (无需询问我们是否知道我们在Selenium IDE中记录测试时会这样做)。您可以在Selnium IDE中运行覆盖脚本,然后单击&#34;保存&#34; (或类似的东西)按钮通过 selenium.runScript - 它应该简单地禁用确认窗口。

    Command: runScript
    Target: {window.onbeforeunload=function(e){};}

答案 7 :(得分:0)

您需要使用try catch块处理意外警报。将代码放在try块中并捕获'UnhandledAlertException'

示例:

try{
     .....
     .....
     code here
}catch(UnhandledAlertException e ){
    driver.switchto().alert().dismiss();
}

答案 8 :(得分:-2)

在点击事件之前放置其中一个:

selenium.chooseCancelOnNextConfirmation()

selenium.chooseOkOnNextConfirmation()