使用selenium测试showModalDialog模态对话框

Selenium目前没有提供对IE模态对话框(即通过showModalDialog方法打开的弹出对话框)的处理。原因在于,模态对话框会将父页面的 JS挂起,直至对话框处理完毕才会继续执行父页面JS。因为Selenium的底层实现是基于JS的,所以模态对话框会同时将selenium挂 起,selenium无法选中模态对话框,直至超时。 在自动化测试领域,Selenium 是一个广泛使用的工具,它允许测试人员通过编写代码来模拟用户在Web应用程序上的交互。然而,对于某些特定的功能,比如 Internet Explorer 中的 `showModalDialog` 方法,Selenium 存在一定的局限性。`showModalDialog` 是一个古老的浏览器API,用于创建模态对话框,它会阻塞页面的JavaScript执行,直到对话框关闭。由于 Selenium 的执行依赖于JavaScript,因此在模态对话框打开时,Selenium 无法与对话框交互,导致测试无法正常进行。 面对这个问题,测试工程师需要采取一些变通的方法。对于两种不同类型的模态对话框应用,我们可以有不同的应对策略: 1. 对于第一类应用,如选择人员或业务类型的操作,这些操作通常只是填充父页面的字段,而不会引发其他动作。在自动化测试中,可以直接在测试代码中创建所需的数据常量,跳过 `showModalDialog` 方法,直接为相关字段赋值,从而避免调用这个方法。 2. 对于第二类应用,如工作流分配这样的复杂操作,`showModalDialog` 调用可能会引起一系列后续操作。在这种情况下,我们需要对代码进行“hack”,也就是临时替换 `showModalDialog` 方法,使其行为更符合自动化测试的需求。在提供的Java代码示例中,可以看到一种可能的解决方案: ```java public void clickAndSelectModalDialog(String locator){ clickForModalDialog(locator); selenium.selectWindow("name=modal"); } private void clickForModalDialog(String locator){ String overrideShowModalDialogJs = "if(selenium.browserbot.getCurrentWindow().showModalDialog){" + "selenium.browserbot.getCurrentWindow().showModalDialog = function( sURL, vArguments, sFeatures)" + "selenium.browserbot.getCurrentWindow().open(sURL, 'modal',sFeatures);}" + "};"; // 重写 showModalDialog 方法 selenium.getEval(overrideShowModalDialogJs); selenium.click(locator); selenium.openWindow("", "modal"); selenium.waitForPopUp("modal", "15000"); } ``` 这段代码首先定义了一个JavaScript字符串,用于重写 `showModalDialog` 方法,将其替换为 `window.open` 函数,这样对话框将以非模态窗口的形式打开,Selenium 就可以继续执行并选中这个新窗口。然后,代码模拟点击触发对话框的元素,打开新的窗口,并等待窗口出现,最后选中这个窗口进行后续操作。 这种方法虽然可以解决特定场景下的问题,但需要注意的是,它不是Selenium官方支持的解决方案,可能会受到浏览器版本、JavaScript环境等因素的影响,且在某些复杂情况下可能不适用。因此,当遇到类似问题时,建议评估其他自动化测试框架,如 Puppeteer 或 Cypress,它们可能提供更完善的对话框处理机制。同时,持续关注Selenium的更新,因为随着技术的发展,未来可能有更优的解决方案出现。
















- yongtaohuangNtt2015-07-03有用,解决了我的问题
- xiaoqingzhi2016-03-23需要.net的,但这个是JAVA的,没有用到
- woxuanni2014-08-18试着看再说
- baidu_344681272016-10-09java还能用 String overrideShowModalDialogJs== 这种语法???!!!!

- 粉丝: 7
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 网络信息安全B作业题和考试复习题.doc
- 互联网背景下如何提高图书编校质量.docx
- tcpip协议与网络管理标准教程.doc
- 大数据背景下高校思想政治教育过程融入路径探究.docx
- 云南基层干部教育培训信息化建设应用研究教育文档.doc
- 团购网站Groupon及中国电子商务发展分析.doc
- 外贸建站-营销型网站建设.doc
- 斩波电路Matlab仿真电力电子技术课程设计.doc
- 互联网+大连海参养殖新模式探究.docx
- python-游戏数据搜索引擎-基于Python开发的游戏信息检索系统-整合多平台游戏数据-提供快速搜索与详细展示功能-支持用户自定义筛选与收藏-适用于游戏爱好者与开发者查询游戏资.zip
- 人工智能双面观.docx
- 基于欧氏距离的K均方聚类算法研究与应用.docx
- 对安徽江苏山东网络电视台的比较分析.docx
- JavaEEJsp图书系统实用技术文档.doc
- 网络信息安全项目教程习题-解答.doc
- 物联网技术在现代种植业中的应用.docx


