2011-07-28 52 views
31

我正在使用selenium webDriver编写一个Web应用程序的测试,并遇到了一个场景,当我尝试关闭浏览器时,出现一个弹出窗口,显示“您确定吗?页面要求您确认你想离开 - 输入的数据将会丢失。“带2个按钮:离开页面并保持在页面上Selenium WebDriver如何关闭浏览器弹出框

如何点击这些按钮?

回答

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

解决这个问题对我来说

+0

你知道轨道上的红宝石解决方案吗? – beornborn

+0

谢谢!为我工作! – Darxis

+2

这只是删除弹出式绑定,它不会单击按钮。 – James

-2

把其中的一个单击事件之前:

selenium.chooseCancelOnNextConfirmation() 

selenium.chooseOkOnNextConfirmation() 
+0

对于硒RC而不是webdriver的 – Maalamaal

+0

@ ethan.thomason作品:我觉得海报希望对webdriver的答案,而不是硒RC。所以,你的答案并不准确 –

1

不知道那是什么,你已经使用了弹出式的结构。 这里有几个可能适用于你的情况,如果你已经使用了其中一种弹出功能。

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

driver.SwitchTo().Alert() 

如果其弹出,然后从窗户

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

iframe的:

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

一旦你通过任何三个拿到那么你就可以访问所有其内部元素。

问候 塔希尔

+0

如何从Alert/Window/Frame返回到原始窗口? –

+0

鉴于OP提供的文本,弹出窗口可能是一个警报。 – oneloop

0

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

选项卡上的“确定”按钮。

driver.Keyboard.PressKey(Keys.Tab); 

你将不得不四处看看需要多少标签页。

然后命中空间。

driver.Keyboard.PressKey(Keys.Space); 

是的这是一种黑客,但WebDriver仍然相当不成熟。

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

15
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 
+1

在Chrome中无法使用。 –

11

您可以通过警报互动和喜欢用Alert API。切换到警报并确认它看起来像这样(在Java中):

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

这在Selenium FAQ还解释。

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]) 
+0

这是为了关闭弹出浏览器窗口,而不是解雇JavaScript警报?因为它不适用于后者...... – hwjp

0

我有同样的问题,当我有字段的形式和“编辑完成”提交按钮,因为当硒IDE自动点击的JavaScript功能,即负责禁用确认窗口(离开页面或仍然在上面),它不需要“mouseup”鼠标事件,这意味着window.confirm仍然有效,并且自动通过测试失败。我的解决方案是覆盖JavaScript函数window.onbeforeunload在这种情况下(不需要问我们是否知道我们在Selenium IDE中记录测试时所做的)。您可以在Selnium IDE中运行覆盖脚本,然后点击“Save”(或类似的东西)按钮,直到selenium.runScript - 它应该简单地禁用确认窗口。

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

您需要使用try catch块来处理意外的警报。将代码放在try块,赶上“UnhandledAlertException”

例子:

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