如何点击确认框上的确定按钮?

时间:2012-10-03 18:28:30

标签: asp.net selenium webforms webdriver selenium-webdriver

我正在测试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();

3 个答案:

答案 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函数中重用posyonBeforeUnloadAction()

答案 1 :(得分:1)

您遇到的问题是因为onBeforeUnload事件显示的对话框与JavaScript confirm()对话框不同。不幸的是,在Windows API级别上区分这个特定对话框上的这两个按钮非常困难。与常规消息框(JavaScript confirm()对话框中的)不同,这些按钮没有控件ID,也不能通过顺序或标题简单地识别它们。如果你发现了一种解决方法,那么IE驱动程序的维护者会欢迎补丁。

答案 2 :(得分:1)

如果它是通过浏览器窗口而不是通过您的javascript代码发出的确认框,那么您将不会将其作为警报处理。那么您需要通过任何第三方工具,如 autoit

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