perl selenium操控瀏覽器填寫表單完成自動化測試

不少時候在作測試的人員須要去測試開發人員的新項目,傳統的操做是打開瀏覽器點擊各個地方看操做是否流暢,是否會報BUG。天天都會重複的操做,我想無論是誰都不喜歡作這些重複的事情吧。這時候若是有一個軟件可以自動化完成重複性的操做,節約了大量的人力物力。此次就來講說關於selenium的那些事,第一次直接把效果展示給你們,這樣就會有學習的興趣。
1、下載所須要的軟件
這裏說一下,我所在的平臺是win。

 
1.selenium server,selenium服務端,用於接收腳本發送的指令,傳達給瀏覽器。
2.jdk,這個很少說,java環境
http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html
3.tesseract,用於解析填寫表單時候的驗證碼(這款軟件之前的HP的,如今開源了,能夠去百度一下他的歷史)

4.perl,程序運行環境
5.ImageMagick,用於處理圖片,這裏我用於裁切截圖,提取驗證碼。
安裝方法
6.Test::WWW::Selenium,perl所須要的模塊。
安裝方法
ppm-shell install Test::WWW::Selenium
7.火狐瀏覽器,因爲selenium的限制,須要版本控制在15如下。
2、
code:
 
    
    
    
    
  1. #!/usr/bin/perl; 
  2. use strict; 
  3. use warnings; 
  4. use Data::Dumper; 
  5. use Time::HiRes qw(sleep); 
  6. use Test::WWW::Selenium; 
  7. use Test::More "no_plan"
  8. use Test::Exception; 
  9. use  encoding "utf-8"
  10. use  Image::Magick; 
  11. use warnings; 
  12. my $verify ; 
  13. my $f1; 
  14. sub Magick{   #裁切圖片 
  15.     my ($x,$y)=@_;  
  16.     my($p_w_picpath, $p); 
  17.     $p_w_picpath = Image::Magick->new; 
  18.     $p = $p_w_picpath->Read('c.png'); 
  19.     $p = $p_w_picpath->Crop(geometry=>"60x30+$x+$y"); #裁切大小,以右上爲起點開始裁切 
  20.     warn "$p" if "$p"
  21.     $p = $p_w_picpath->Write('x.png'); 
  22.     warn "$p" if "$p"
  23.     my $tesseract_soft_path = 'c:/Program Files/Tesseract-OCR/tesseract.exe';  #這裏是調用ocr解析圖片 
  24.     my $png_path = 'f:/perl/cu'
  25.     my $tesseract=system ("$tesseract_soft_path" ,"$png_path/x.png","$png_path/x","-l"); #處理圖片,默認處理爲txt文件 
  26. unless($tesseract){ 
  27.     open FH,"$png_path/x.txt" or die "$!"
  28.     while(<FH>){ 
  29.         /(\d{4})(?{$verify=$1})/; 
  30.     } 
  31.     close FH; 
  32. return 1; 
  33. my $sel = Test::WWW::Selenium->new( host => "localhost",   #實例化瀏覽器 
  34.                                     port => 4444,  
  35.                                     browser => "*chrome",  
  36.                                     browser_url => "http://www.mchina.cn/searchkeyword.html" 
  37.                                     ); 
  38. open FA,"uid.txt" or die "$!"
  39. while(<FA>){ 
  40.     chomp; 
  41.     my $uid =$_; 
  42. while(1 and sleep 4){ 
  43.     $sel->open_ok("/searchkeyword.html"); 
  44. $sel->wait_for_page_to_load_ok("30000"); 
  45. $sel->capture_entire_page_screenshot('f:\perl\cu\c.png','background=#CCFFDD');  #將頁面製做成png圖片 
  46. Magick("660","400"); #裁切圖片 
  47. $f1=$sel->get_html_source; 
  48.  if($f1 =~ /<div[^>]+center">\s*<font[^>]+red">[\s\S]+?<li><span>.*?<\/span><\/li>/){  #若是驗證碼不配對,用正則判斷,須要裁切的地方須要變換 
  49.       Magick("654","420");    
  50.  } 
  51. $sel->wait_for_page_to_load_ok("30000"); 
  52. if (defined $verify){ 
  53. $sel->type_ok("id=keyword""$uid"); 
  54. $sel->type_ok("id=confirmcodekeyword""$verify"); 
  55. $sel->click_ok("css=input.btn"); 
  56. $sel->wait_for_page_to_load_ok("60000"); 
  57. undef($verify); 
  58. my $err = $sel->get_html_source(); 
  59. last unless $err =~ /<div[^>]+center">\s*<font[^>]+red">[\s\S]+?<li><span>.*?<\/span><\/li>/; 
  60. $sel->open_ok("/searchkeyword.html"); 
  61. $sel->wait_for_page_to_load_ok("30000"); 
  62. $sel->refresh() ; 
  63.  my $frame = $sel->select_frame('//iframe'); 
  64. if(defined $frame){                #因爲是frame構架的,返回的源碼中是看不到所需信息的,須要用 select_frame定位    
  65. my $route= $sel->get_html_source(); 
  66. my @info; 
  67. if($route =~ /<div[^>]+searchkey">.*?\n.*?([^\s]+)[\s\S]+? 
  68.    <div[^>]+keystatus">\s*<font[^>]+>([^<]+)[\s\S]+?         
  69.    <div[^>]+regtime">(\S+)[\s\S]+? 
  70.    <div[^>]+registerNOforkey">\s*([^\s]*)/x){ 
  71.     my($name,$status,$regtime,$idnum); 
  72.     $name = $1;$status = $2;$regtime = $3 ;$idnum =$4||0; 
  73.     push @info ,$uid,$name,$status,$regtime,$idnum; 
  74. }else
  75.     if($route =~ /<font[^>]+red">\s*([^\s]+)/){  
  76.         push @info,$uid,$1}; 
  77. open FH,">>output.txt" or die "$!"
  78. print FH join("\t",@info); 
  79. print FH "\n"
  80. close FH; 
  81. close FA; 
  82. sleep 500; 
  83. $sel->stop(); 
3、解釋
上面的一段code主要用於查詢信息,自動填寫驗證碼,把查詢到的結果導入文本。
操做步驟
1.cmd進入剛纔下載軟件的目錄。
執行java -jar selenium-server-standalone-2.25.0.jar(開啓後不要關閉這個cmd窗口)
 

1.運行perl程序
F:\perl\cu>Perl-selenium.pl
 

 

運行過程

 

 
相關文章
相關標籤/搜索