一.概述
在使用自动化框架selenium实施中,经常会遇到windows弹出框的出现,刚入门的web自动化测试小伙伴不要慌哦!
二.几种常见的处理windows弹出框的方案
2.1 Selenium 处理安全对话框 (windows security dialog)用autoit 来代替
2.1.1 安装autoit-v3-setup.exe
2.1.2 将AutoitX3.dll和jcob.1.18-M2-x86.dll放到C:windowsSystem32路径下;如果是64位系统,需把AutoitX3_63.dll和jcob.1.18-M2-x64.dll分别放到C:windowsSystem32和C:windowsSyswow64路径下
2.1.3 注册AutoitX3.dll:dos窗口中输入regsvr32 autoitX3.dll并按回车;如果是64位系统注册AutoitX3_64.dll:dos窗口中输入regsvr32 autoitX3_64.dll并按回车
2.1.4 在项目中需要引入jar包:AutoItX4Java.jar和jacob.jar
2.1.5 实例代码如下
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 /*** 2 * 3 * @param title window框的标题(用安装好的autoit64.exe可以识别wind弹窗口的标题) 4 * @param userName 用户名 5 * @param pwd 密码 6 */ 7 public void autoitHandleWin(String title,String userName,String pwd){ 8 AutoItX x=new AutoItX(); 9 if(x.winWaitActive(title,"",20)){ 10 if(x.winExists(title)){ 11 x.sleep(500); 12 x.ControlSetText(title,"",Edit1,userName); 13 x.ControlSetText(title,"",Edit1,pwd); 14 x.ControlClick(title,"",Button); 15 } 16 } 17 }
2.2 JAVA程序实现自动测试,自动演示功能,或者是其它的一些鼠标和键盘控制的应用。出于这样的目的,自从JDK1.3开始,它就为我们提供了一个用来产生本机输入事件的机器人类--java.awt.Robot;钮
2.2.1 比如我们可以用Robot类模拟键盘发送快捷键的方式来操作IE11的下载框的保存按,实例代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public void robotHandleWin(){ 2 try { 3 Robot robot=new Robot(); 4 robot.keyPress(KeyEvent.VK_ALT); 5 robot.keyPress(KeyEvent.VK_S); 6 robot.delay(500); 7 robot.keyRelease(KeyEvent.VK_S); 8 robot.keyRelease(KeyEvent.VK_ALT); 9 } catch (AWTException e) { 10 // TODO Auto-generated catch block 11 e.printStackTrace(); 12 } 13 }
2.3 根据截图来操作
2.3.1 安装sikuli-x-1.0rc3(r905)-win32.exe
2.3.2 配置环境变量
下面来做一个自动化的小例子。(官方的第一个小例子为开始运行里输入hello world )这里为打开360极速浏览器(默认为百度首页),搜索框里输入sikuli ,然后点击“百度一下”按钮搜索。
第一步、点击桌面360极速浏览器图标。
方法一,输入双击函数doubleClick(),然后通过截图工具对桌面图标截图,输入。
方法二很快捷,点击窗口左侧双击函数doubleClick(),直接进入截图状态。截图完成后直接添加函数到脚本编辑区域。
第二步,我们依然用第二种快捷的方式,点击左侧type(图标,text) 函数,这次截取的对象为百度首页的输入框。
因为,默认定位的焦点为图片的中心,我们要输入的位置在输入框的左侧,所以需要对焦点进行调整。直拉点击截图的输入框图片。
当然,在这个窗口中,我们也可调整图片的匹配度,匹配度越低容错能力越强。这里来简单解释一下:
大家知道ie7 与 ie8 的图标虽然相似,但还是有所差别的。为了使脚本的移植性更强。比如本机是用IE7 录制的脚本,移植到另一台电脑上只有IE 8 ,因为精确度调低,脚本也会把IE8 当IE 7 来执行。当然有些情况下调低并不好,比如桌面上有两个图标非常相识,那么精确度调整的很低,那么脚本就无法辨认谁是谁了。
第三步、这一步与第一步一样,不过这里要使用的函数是单击函数click() ,点击“百度一下”按钮。
下面完整脚本:
运行一下吧这个小脚本吧!成就感就此而生,这是你对这种技术产生兴趣的动力。。
2.3.3 根据截的图片来点击页面对象,代码实例如下
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public void sikuliHandleWin(String pngPath,String envetName){ 2 Screen screen=new Screen(); 3 Pattern image=new Pattern(pngPath); 4 if(envetName.equalsIgnoreCase("click")){ 5 try { 6 if(screen.exists(image)!=null){ 7 screen.click(image); 8 } 9 } catch (Exception e) { 10 // TODO: handle exception 11 } 12 } 13 }
---------------------------------技术改变生活!,QQ:770544029