加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 20:59:26 所属栏目:大数据 来源:网络整理
导读:很多时候在做测试的人员需要去测试开发人员的新项目,传统的操作是打开浏览器点击各个地方看操作是否流畅,是否会报BUG。每天都会重复的操作,我想不管是谁都不喜欢做这些重复的事情吧。这时候如果有一个软件能够自动化完成重复性的操作,节约了大量的人力物
很多时候在做测试的人员需要去测试开发人员的新项目,传统的操作是打开浏览器点击各个地方看操作是否流畅,是否会报BUG。每天都会重复的操作,我想不管是谁都不喜欢做这些重复的事情吧。这时候如果有一个软件能够自动化完成重复性的操作,节约了大量的人力物力。这次就来说说关于selenium的那些事,第一次直接把效果展现给大家,这样就会有学习的兴趣。
一、下载所需要的软件
这里说一下,我所在的平台是win。

?
1.selenium server,selenium服务端,用于接收脚本发送的指令,传达给浏览器。
http://selenium.googlecode.com/files/selenium-server-standalone-2.25.0.jar
2.jdk,这个不多说,java环境
http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html
3.tesseract,用于解析填写表单时候的验证码(这款软件以前的HP的,现在开源了,可以去百度一下他的历史)
http://tesseract-ocr.googlecode.com/files/tesseract-ocr-setup-3.02.02.exe

4.perl,程序运行环境
http://www.activestate.com/activeperl/downloads
5.ImageMagick,用于处理图片,这里我用于裁切截图,提取验证码。
安装方法
ppm ?http://www.bribes.org/perl/ppm/Image-Magick.ppd
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. }?
  33. return?1;?
  34. }?
  35. my?$sel?=?Test::WWW::Selenium->new(?host?=>?"localhost",???#实例化浏览器?
  36. ????????????????????????????????????port?=>?4444,??
  37. ????????????????????????????????????browser?=>?"*chrome",??
  38. ????????????????????????????????????browser_url?=>?"http://www.mchina.cn/searchkeyword.html"?
  39. ????????????????????????????????????);?
  40. open?FA,"uid.txt"?or?die?"$!";?
  41. while(<FA>){?
  42. ????chomp;?
  43. ????my?$uid?=$_;?
  44. while(1?and?sleep?4){?
  45. ????$sel->open_ok("/searchkeyword.html");?
  46. $sel->wait_for_page_to_load_ok("30000");?
  47. $sel->capture_entire_page_screenshot('f:perlcuc.png','background=#CCFFDD');??#将页面制作成png图片?
  48. Magick("660","400");?#裁切图片?
  49. $f1=$sel->get_html_source;?
  50. ?if($f1?=~?/<div[^>]+center">s*<font[^>]+red">[sS]+?<li><span>.*?</span></li>/){??#如果验证码不配对,用正则判断,需要裁切的地方需要变换?
  51. ??????Magick("654","420");????
  52. ?}?
  53. $sel->wait_for_page_to_load_ok("30000");?
  54. if?(defined?$verify){?
  55. $sel->type_ok("id=keyword",?"$uid");?
  56. $sel->type_ok("id=confirmcodekeyword",?"$verify");?
  57. $sel->click_ok("css=input.btn");?
  58. $sel->wait_for_page_to_load_ok("60000");?
  59. undef($verify);?
  60. my?$err?=?$sel->get_html_source();?
  61. last?unless?$err?=~?/<div[^>]+center">s*<font[^>]+red">[sS]+?<li><span>.*?</span></li>/;?
  62. }?
  63. $sel->open_ok("/searchkeyword.html");?
  64. $sel->wait_for_page_to_load_ok("30000");?
  65. $sel->refresh()?;?
  66. }?
  67. ?my?$frame?=?$sel->select_frame('//iframe');?
  68. if(defined?$frame){????????????????#由于是frame构架的,返回的源码中是看不到所需信息的,需要用?select_frame定位????
  69. my?$route=?$sel->get_html_source();?
  70. my?@info;?
  71. if($route?=~?/<div[^>]+searchkey">.*?n.*?([^s]+)[sS]+??
  72. ???<div[^>]+keystatus">s*<font[^>]+>([^<]+)[sS]+??????????
  73. ???<div[^>]+regtime">(S+)[sS]+??
  74. ???<div[^>]+registerNOforkey">s*([^s]*)/x){?
  75. ????my($name,$status,$regtime,$idnum);?
  76. ????$name?=?$1;$status?=?$2;$regtime?=?$3?;$idnum?=$4||0;?
  77. ????push?@info?,$uid,$name,$idnum;?
  78. }else{?
  79. ????if($route?=~?/<font[^>]+red">s*([^s]+)/){??
  80. ????????push?@info,$1};?
  81. }?
  82. open?FH,">>output.txt"?or?die?"$!";?
  83. print?FH?join("t",@info);?
  84. print?FH?"n";?
  85. close?FH;?
  86. }?
  87. }?
  88. close?FA;?
  89. sleep?500;?
  90. $sel->stop();?
三、解释
上面的一段code主要用于查询信息,自动填写验证码,把查询到的结果导入文本。
操作步骤
1.cmd进入刚才下载软件的目录。
执行java -jar selenium-server-standalone-2.25.0.jar(开启后不要关闭这个cmd窗口)
?

1.运行perl程序
F:perlcu>Perl-selenium.pl
?

?

运行过程

?

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读