一.概述
在使用自動化框架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 }
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 }
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 }
---------------------------------技術改變生活!,QQ:770544029