利用selenium测试showModalDialog模态对话框
当前位置:以往代写 > JAVA 教程 >利用selenium测试showModalDialog模态对话框
2019-06-14

利用selenium测试showModalDialog模态对话框

利用selenium测试showModalDialog模态对话框

副标题#e#

Selenium今朝没有提供对IE模态对话框(即通过 showModalDialog要领打开的弹出对话框)的处理惩罚。原因在于,模态对话框会将父页面的JS挂起,直至对话框处理惩罚完毕才会继承执行父页面JS。因为Selenium的底层实现是基于JS的,所以模态对话框会同时将selenium挂起,selenium无法选中模态对话框,直至超时。

可是许多系统往往有大量的模态对话框应用。这些应用分为两类:一类是选人、选业务范例等操纵,这些操纵的目标是填充父页面相应的字段,不会触发其他操纵;别的一类较量非凡,譬喻事情流的派发,这类操纵在模态对话框选人返回值后还会继承执行一系列的操纵(即showModalDialog要领的挪用被夹在一堆 JS操纵中间)。

对付第一种环境,可以在测试代码里成立相应的数据常量,通过直接赋值的方法制止挪用showModalDialog要领;对付第二种环境,则只能hack。

在当前的测试用例里,回收以下的hack要领:

典范的模态对话框会在点击一个页面元素后打开(譬喻button),在第一次点击该页面元素时,我们对showModalDialog要领举办包围,改打开模态对话框为window.open打开网页,并将selenium选中该弹出网页:

Java代码

public void clickAndSelectModalDialog(String locator){
   clickForModalDialog(locator);
    selenium.selectWindow(“name=modal”);
}

private void clickForModalDialog(String locator){
   String overrideShowModalDialogJs=="if(selenium.browserbot.getCurrentWindow().showModalDialog){";

overrideShowModalDialogJs += "selenium.browserbot.getCurrentWindow().showModalDialog = function( sURL, vArguments, sFeatures)";

overrideShowModalDialogJs +="selenium.browserbot.getCurrentWindow().open(sURL, 'modal', sFeatures);";

overrideShowModalDialogJs += "};}";
//showModalDialog要领举办包围
selenium.getEval(overrideShowModalDialogJs);
selenium.click(locator);
selenium.openWindow(“”,”modal”);
selenium.waitForPopUp(“modal”,”15000”);

}

接下来就可以在弹出网页里举办操纵,获取需要返回给父页面的值,这些值一般是一个数组。获取值后封锁弹出网页并返回父页面。在父页面里再次点击打开模态对话框的元素,对showModalDialog要领举办第二次包围,将上面获取的值直接返回。


#p#副标题#e#

Java代码

public void acceptModalValue(String locator,String[] values){
   String overrideShowModalDialogJs=="if(selenium.browserbot.getCurrentWindow().showModalDialog){";

overrideShowModalDialogJs += "selenium.browserbot.getCurrentWindow().showModalDialog = function( sURL, vArguments, sFeatures)";

overrideShowModalDialogJs +="{ "+generateModalDialogReturnObject(values)+”return temp”;

overrideShowModalDialogJs += "};}";
//showModalDialog要领举办包围
selenium.getEval(overrideShowModalDialogJs);
selenium.click(locator);
}

private void generateModalDialogReturnObject (String[] values){
   StringBuffer returnObject=new StringBuffer();
   returnObject.append(“var temp=new Array();”);
   for(int i=0;i<values.length;i++){
     returnObject.append(“temp[”+i+”]=’”+values[i]+”’;”);
   }
   return returnObject.toString();
}

这样就完成了整个进程。看一个示例,该示例打开一个选部分的模态对话框,从部分树里选择部分,然后返回:

Java代码

//点击后弹出部分选择框的图片
String depChooseLocator=”…/img”;
//点击并选中该弹出网页
clickAndSelectModalDialog(depChooseLocator);
//执行部分树的操纵
….
//获取该对话框要返回给父页面的值
String name=selenium.getEval(“window.seltree.GetAllCheckText();”);
String id=selenium.getEval(“window.seltree.GetAllNodeId();”);
//封锁部分选择对话框
closeModalDialog();
//返回父页面
Selenium.selectWindow(“name=main95598”);
//组装返回值
String returnValues=new String[2];
returnValues[0]=name;
returnValues[1]=id;
//父页面获取对话框返回值
acceptModalValue(depChooseLocator, returnValues);

可以进一步抽象为模板回调要领,略。

    关键字:

在线提交作业