我正在测试ASP.NET Web表单应用程序。对于IE,当我关闭浏览器时,弹出Confirm
框,我需要点击带有Selenium Web Driver的OK
按钮。
弹出框的JavaScript是:
<script type="text/javascript">
//<![CDATA[
function onBeforeUnloadAction() {return 'Are you sure to leave ALNW? All unsaved data will be discarded.';}
window.onbeforeunload = function () {if ((window.event.clientX < 0) || (window.event.clientY < 0)) {return onBeforeUnloadAction();}}
//]]>
</script>
处理Confirm
框的代码是:
driver.Close();
var alert = driver.SwitchTo().Alert();
alert.Accept();
问题是Confirm
框只是坐在那里,测试失败了。我在driver.Close()
处得到以下例外:
Modal dialog present (UnexpectedAlertOpen)
修改
我现在的解决方法是将事件处理程序设置为null并假设单击“确定”。
var js = driver as IJavaScriptExecutor;
js.ExecuteScript("window.onbeforeunload=null;");
driver.Close();
答案 0 :(得分:1)
使用Selenium,在关闭该确认框的位置记录测试,然后检查所使用的硒。
使您的代码适应Firefox:
<script type="text/javascript">
var posx;var posy;
function getMouse(e){
posx=0;posy=0;
var ev=(!e)?window.event:e;//IE:Moz
if (ev.pageX){//Moz
posx=ev.pageX+window.pageXOffset;
posy=ev.pageY+window.pageYOffset;
}
else if(ev.clientX){//IE
posx=ev.clientX+document.body.scrollLeft;
posy=ev.clientY+document.body.scrollTop;
}
else{
return false
}//old browsers
document.getElementById('myspan').firstChild.data='X='+posx+' Y='+posy;
}
document.onmousemove=getMouse
</script>
因此,在posx
函数中重用posy
和onBeforeUnloadAction()
。
答案 1 :(得分:1)
您遇到的问题是因为onBeforeUnload
事件显示的对话框与JavaScript confirm()
对话框不同。不幸的是,在Windows API级别上区分这个特定对话框上的这两个按钮非常困难。与常规消息框(JavaScript confirm()
对话框中的)不同,这些按钮没有控件ID,也不能通过顺序或标题简单地识别它们。如果你发现了一种解决方法,那么IE驱动程序的维护者会欢迎补丁。
答案 2 :(得分:1)
如果它是通过浏览器窗口而不是通过您的javascript代码发出的确认框,那么您将不会将其作为警报处理。那么您需要通过任何第三方工具,如 autoit 强>
在这里,您可以编写一个4到5行的脚本来处理该确认框,并在该确认框出现之前调用该脚本。