selenium自动化实施中对windows弹出框的几种常见处理方案

一.概述

    在使用自动化框架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 实例代码如下

 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     }
View Code

2.2 JAVA程序实现自动测试,自动演示功能,或者是其它的一些鼠标和键盘控制的应用。出于这样的目的,自从JDK1.3开始,它就为我们提供了一个用来产生本机输入事件的机器人类--java.awt.Robot;钮

2.2.1 比如我们可以用Robot类模拟键盘发送快捷键的方式来操作IE11的下载框的保存按,实例代码如下:

 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     }
View Code

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 根据截的图片来点击页面对象,代码实例如下

 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     }
View Code

---------------------------------技术改变生活!,QQ:770544029

原文地址:https://www.cnblogs.com/liwu/p/5596024.html