2012-10-03 37 views
1

我正在测试一个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,承担OK被点击。

var js = driver as IJavaScriptExecutor; 
js.ExecuteScript("window.onbeforeunload=null;"); 
driver.Close(); 

回答

1

使用硒,记录一个测试,关闭该确认框,然后检查使用硒。

你的代码适应火狐:

<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> 

onBeforeUnloadAction()功能,所以重用posxposy

+0

当我从Firefox关闭浏览器时,'Confirm'不会弹出。该Web应用程序供内部使用,因此所有用户都使用IE。 –

+0

编辑答案,所以代码将在Firefox中工作。 –

1

您看到的问题是因为onBeforeUnload事件提供的对话框与JavaScript confirm()对话框不同。不幸的是,在Windows API级别的这个特殊对话框中区分这两个按钮是非常困难的。与常规消息框(JavaScript对话框中的JavaScript confirm())不同,这些按钮不具有控件ID,也不安全,只需按顺序或标题标识即可。如果你发现一种解决办法,IE驱动程序的维护者会欢迎补丁。

1

如果它是一个通过浏览器窗口进入的确认框,而不是通过您的javascript代码,那么您将不会将其作为alert.Fot这个目的,你需要通过任何第三方工具,如autoit

在这里,您可以编写一个4到5行脚本来处理该确认框并在该确认框出现之前调用该脚本。