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