1

我正在测试一个 ASP.NET Web 表单应用程序。对于 IE,当我关闭浏览器时,会Confirm弹出一个框,我需要单击OK带有 Selenium Web Driver 的按钮。

弹出框的 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();
4

3 回答 3

1

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

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

于 2012-10-04T04:53:35.763 回答
1

您看到的问题是因为onBeforeUnload事件呈现的对话框与 JavaScriptconfirm()对话框不同。不幸的是,在 Windows API 级别上很难区分这个特定对话框上的这两个按钮。与常规消息框(即 JavaScriptconfirm()对话框)不同,这些按钮没有控件 ID,也不能简单地通过顺序或标题来识别它们。如果你找到修复它的方法,IE 驱动程序的维护者会欢迎补丁。

于 2012-10-03T20:05:14.710 回答
1

使用 Selenium,在关闭确认框的位置记录测试,然后检查使用的 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()

于 2012-10-03T19:05:50.963 回答