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:\windows\System32路徑下;如果是64位系統,需把AutoitX3_63.dll和jcob.1.18-M2-x64.dll分別放到C:\windows\System32和C:\windows\Syswow64路徑下

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM