日常的 Web 網站開發的過程中,為提升登錄安全或防止用戶通過腳本進行黃牛操作(宇宙最貴鐵皮天朝魔都的機動車牌照競拍中),很多網站在登錄的時候,添加了驗證碼驗證,而且驗證碼的實現越來越復雜,對其進行腳本識別的難度也越來越高。這對我們自動化腳本編寫帶了非常的不便,那么如何解決登錄時的驗證碼問題呢?經常有初學自動化腳本編寫的小主們問及此問題。
此文主要針對如何解決自動化測試腳本中含登錄態的操作問題,即如何降低驗證碼對自動化腳本編寫過程中的解決方法進行分析和解決,并以實例演示(基于易迅網易迅賬號登錄)。解決驗證碼的問題,一般有以下幾種方法:
1、 驗證碼識別技術(OCR)。通過驗證碼識別技術,識別登錄過程中出現的驗證碼。此種方法不建議使用,浪費大量的人力物力,得不償失。
2、萬能驗證碼。例如:規定接收到的 ”aaron“ 為萬能驗證碼,若服務器接收到了此驗證碼,則返回正確登錄信息。此方法的缺陷是無法在線上使用,因為無法保證萬能驗證碼的安全性。因而此方法一般應用于測試環境。
3、Cookie 越界登錄。通過將用戶登錄的 cookie 信息添加至瀏覽器,直接越過登錄操作(間接的跳過驗證碼輸入),將用戶的登錄態添加到瀏覽器,即可進行相應的登錄態用戶操作。雖然此種方法有一定的局限性(受 cookie 的有效時間限制),俺還是比較推崇此種方法。
上述第一種方法,非常簡單,在此就不再贅述了;第二種方法,有興趣的小主大牛們可以嘗試一下。下面主要以第三種方法為實例演示,基于易迅網易迅賬號登錄的 cookie 添加。
閑話少述,小二上碼。。。敬請各位小主參閱,希望能對您在日常的 WebUI 自動化腳本編寫有一定的啟發和幫助。若有不足或錯誤之處,敬請大神指正,不勝感激!

1 /** 2 * Aaron.ffp Inc. 3 * Copyright (c) 2004-2015 All Rights Reserved. 4 */ 5 package main.aaron.demo.cookie; 6 7 import java.io.BufferedReader; 8 import java.io.File; 9 import java.io.FileReader; 10 import java.util.Date; 11 12 import main.aaron.sele.core.TestCase; 13 14 import org.openqa.selenium.Cookie; 15 import org.testng.Assert; 16 import org.testng.annotations.AfterClass; 17 import org.testng.annotations.Test; 18 19 /** 20 * Add cookie to web browser 21 * 22 * @author Aaron.ffp 23 * @version V1.0.0: autoSeleniumDemo main.aaron.demo.cookie UseCookieLogin.java, 2015-6-19 15:53:53 Exp $ 24 */ 25 public class UseCookieLogin extends TestCase{ 26 private final String f_cookie = this .PROJECTHOME + this .FILESEPARATOR + "cookie" + this .FILESEPARATOR + "browser.data" ; 27 private String baseUrl = "http://www.yixun.com/" ; 28 29 @Test 30 public void useCookieLogin(){ 31 this .webdriver.get( this .baseUrl); 32 33 try { 34 // clean the invalid cookie 35 this .webdriver.manage().deleteAllCookies(); 36 37 // create file object 38 File f = new File( this .f_cookie); 39 40 // read file 41 FileReader fr = new FileReader(f); 42 BufferedReader br = new BufferedReader(fr); 43 44 // store row cookie info 45 String line; 46 47 // add cookie to web browser 48 while ((line = br.readLine()) != null ) { 49 String[] item = line.split(";" ); 50 51 if (item.length != 6 ) { 52 continue ; 53 } 54 55 for ( int i = 0; i < item.length; i++ ) { 56 String name = item[0 ]; 57 String value = item[1 ]; 58 String domain = item[2 ]; 59 String path = item[3 ]; 60 Date expiry = null ; 61 boolean isSecure = new Boolean(item[5 ]); 62 63 // create cookie object 64 Cookie cookie = new Cookie(name, value, domain, path, expiry, isSecure); 65 66 // add cookie to web browser 67 this .webdriver.manage().addCookie(cookie); 68 } 69 } 70 71 br.close(); 72 } catch (Exception e) { 73 e.printStackTrace(); 74 Assert.fail((e.getMessage() == null )? "" :e.getMessage()); 75 } 76 77 this .webdriver.get( this .baseUrl); 78 } 79 80 @AfterClass 81 public void afterClass(){ 82 this .webdriver.close(); 83 this .webdriver.quit(); 84 } 85 }
關于如何獲取登錄的 cookie 信息數據并保存,請參閱 Selenium2學習-017-WebUI自動化實戰實例-015-獲取瀏覽器中的 cookie 信息
PS:小主們在應用以上源碼時,需要將源碼中的 cookie 文件位置修改為本地合法路徑才可:private final String f_cookie = this.PROJECTHOME + this.FILESEPARATOR + "cookie" + this.FILESEPARATOR + "browser.data";
?
至此, WebUI 自動化功能測試腳本 第 016-自動化腳本編寫過程中的登錄驗證碼問題 順利完結,希望此文能夠給初學 Selenium 的您一份參考。
最后,非常感謝親的駐足,希望此文能對親有所幫助。熱烈歡迎親一起探討,共同進步。非常感謝! ^_^
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
