【自動化測試】使用Java+selenium填寫驗證碼成功登錄


  這是我第一次發博客,若有問題,請多多指教!

  本次是為了幫忙解決,如果在平時自動化遇到有驗證碼填寫的情況,我們如何成功登錄情況。

  1. 思路:

    首先我們先將驗證碼復制並保存成一個圖片,然后使用tesseract-ocr這個光學軟件識別成txt文件,接着我們只要讀取txt文件的內容即可

   2. 使用工具:

    Eclipse、selenium、火狐、log4j、AUTOIT_3.3.14.1、tesseract-ocr

   3. 安裝軟件

    I. eclipse安裝,直接網上下載並安裝即可

    II.Selenium和log4j,這兩個是個jar包,只需要下載下來即可,然后我們建立項目的時候,可以建立一個文件lib保存起來

    如圖:

     

 

    如何使用這兩個jar包?項目à右鍵—>構建路徑à配置購置路徑à點擊添加jarj即可

     

 

 

    III.火狐安裝,建議默認安裝吧。免得到時候在代碼還需添加一句尋找火狐的路徑

    IV.AUTOIT_3.3.14.1安裝,為什么安裝這個呢?是為了解決window自帶的操作,例如保存,因為我需要用到另存為圖片,所以這個可以幫我解決。安裝嘛,我是直接一直next

    V. tesseract-oc,同理安裝,不過需要重啟一下電腦,它才會把路徑寫入path

  1. 解決驗證碼的步驟

public static void baoCunTuPian(WebDriver driver) throws AWTException, InterruptedException{

//右鍵點擊瀏覽器的屬性

     Actions action = new Actions(driver);

     action.contextClick(driver.findElement(By.id("ImageButton1"))).build().perform();

     System.out.print("右鍵打開瀏覽器屬性成功\n");

    Robot robot = new Robot();

     Thread.sleep(1000);

    

     robot.keyPress(KeyEvent.VK_DOWN);

     System.out.print("移動到查看圖像");

     Thread.sleep(1000);

    

     robot.keyPress(KeyEvent.VK_DOWN);

     System.out.print("移動到復制圖像" +

             "\n");

     Thread.sleep(1000);

    

     robot.keyPress(KeyEvent.VK_DOWN);

     System.out.print("移動到復制圖像地址\n");

     Thread.sleep(1000);

    

     robot.keyPress(KeyEvent.VK_DOWN);

     System.out.print("移動到將圖像另存為\n");

     Thread.sleep(1000);

    

     robot.keyPress(KeyEvent.VK_ENTER);

     Thread.sleep(1000);

     System.out.print("點擊圖像彈出另存\n");

    

     robot.keyRelease(KeyEvent.VK_DOWN);//釋放向下鍵,不然在此之前的條目將起作用

     Thread.sleep(1000);

    

     try {

         Runtime.getRuntime().exec("c:\\test11.exe");//運行保存

         System.out.print("保存圖片成功\n");

     } catch (IOException e) {

         // TODO Auto-generated catch block

         e.printStackTrace();                                        

     }

}

 

這段代碼分兩部分來解讀:右鍵彈出屬性和保存圖片

 

我們將鼠標的位置指向驗證碼的圖片,然后右鍵點擊

         如圖:

   

 

         然后我們需要找到“將圖像另存為”

        

 

         這段代碼就是描述我們如何找到另存並保存起來

 

         接着,彈出來的另存為的操作就不再是java能夠操作的了,我們這時候需要用到另外類似VB的腳本語言,於是我們的AUTOIT登場了。

   

 

 

使用AutoitInfo.exe來定位

 

 

 

然后打開我們的腳本編寫工具SciTE.exe

 

 

PS:其實下面的那段代碼我也不是很懂

 

 

本段代碼是為了清理我要存在圖片路徑是否存在同名,如果同名先刪除同名圖片

 

 

這段代碼是將我們另存的圖片名為a.png,然后保存到c盤。

我們寫好了這段代碼之后,接着使用ctrl+F7,即可將它變為EXE文件。如果報病毒,請不要理它,保證百分百沒有病毒的。

 

 

好了我們接着就需要調用我們的腳本。我的腳本名字為test11.exe,保存在本機的C盤

 

OK,我們現在就已經把圖片的保存位置搞定。接着我們需要用tesseract-ocr這個軟件來識別我們的圖片內容,使用的代碼是dos命令,

命令如下:tesseract.exe c:/a.png c:/a -psm 6

 

意思是:將C盤下的a.png識別並保存到C盤的a.txt

 

有些人用 tesseract.exe c:/a.png c:/a  -l 就解決了,我的不知道為何需要用-psm 6才能解決

 

我們將這條命令保存為.bat格式即可

 

 

 

然后,我們用java的Runtime.getRuntime().exec() 這個方法就可以調用。

 

既然已經保存為文件格式,那么我們就需要來讀取文件的內容,讀取文件內容的代碼,我也不講述了

public static String txt2String(File file){

        String result = "";

       try{

            BufferedReader br = new BufferedReader(new FileReader(file));//構造一個BufferedReader類來讀取文件

            String s = null;

            while((s = br.readLine())!=null){//使用readLine方法,一次讀一行

               result = result + "\n" +s;

        }

        br.close();   

       }catch(Exception e){

            e.printStackTrace();

        }

       return result;

}

 

主方法調用

File file = new File("c:/a.txt");//讀取文件

 System.out.println(txt2String(file)+"a");

 

存在的問題:orc識別率還是很低,登錄成功幾率還沒有超過90%,有待提高

解決方案:訓練orc的識別率(有時間再推出類似相關的文章)

 


免責聲明!

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



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