且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

perl selenium操控浏览器填写表单完成自动化测试

更新时间:2022-09-13 13:34:31

很多时候在做测试的人员需要去测试开发人员的新项目,传统的操作是打开浏览器点击各个地方看操作是否流畅,是否会报BUG。每天都会重复的操作,我想不管是谁都不喜欢做这些重复的事情吧。这时候如果有一个软件能够自动化完成重复性的操作,节约了大量的人力物力。这次就来说说关于selenium的那些事,第一次直接把效果展现给大家,这样就会有学习的兴趣。
一、下载所需要的软件
这里说一下,我所在的平台是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以下。
二、
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($image, $p); 
  17.     $image = Image::Magick->new; 
  18.     $p = $image->Read('c.png'); 
  19.     $p = $image->Crop(geometry=>"60x30+$x+$y"); #裁切大小,以右上为起点开始裁切 
  20.     warn "$p" if "$p"
  21.     $p = $image->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(); 
三、解释
上面的一段code主要用于查询信息,自动填写验证码,把查询到的结果导入文本。
操作步骤
1.cmd进入刚才下载软件的目录。
执行java -jar selenium-server-standalone-2.25.0.jar(开启后不要关闭这个cmd窗口)
 

perl selenium操控浏览器填写表单完成自动化测试

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

perl selenium操控浏览器填写表单完成自动化测试 

运行过程

 

perl selenium操控浏览器填写表单完成自动化测试










本文转自 mcshell 51CTO博客,原文链接:http://blog.51cto.com/mcshell/1099589,如需转载请自行联系原作者