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

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 }
關(guān)于如何獲取登錄的 cookie 信息數(shù)據(jù)并保存,請(qǐng)參閱 Selenium2學(xué)習(xí)-017-WebUI自動(dòng)化實(shí)戰(zhàn)實(shí)例-015-獲取瀏覽器中的 cookie 信息
PS:小主們?cè)趹?yīng)用以上源碼時(shí),需要將源碼中的 cookie 文件位置修改為本地合法路徑才可:private final String f_cookie = this.PROJECTHOME + this.FILESEPARATOR + "cookie" + this.FILESEPARATOR + "browser.data";
?
至此, WebUI 自動(dòng)化功能測(cè)試腳本 第 016-自動(dòng)化腳本編寫過(guò)程中的登錄驗(yàn)證碼問(wèn)題 順利完結(jié),希望此文能夠給初學(xué) Selenium 的您一份參考。
最后,非常感謝親的駐足,希望此文能對(duì)親有所幫助。熱烈歡迎親一起探討,共同進(jìn)步。非常感謝! ^_^
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

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