很多时候在做测试的人员需要去测试开发人员的新项目,传统的操作是打开浏览器点击各个地方看操作是否流畅,是否会报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:
- #!/usr/bin/perl;
- use strict;
- use warnings;
- use Data::Dumper;
- use Time::HiRes qw(sleep);
- use Test::WWW::Selenium;
- use Test::More "no_plan";
- use Test::Exception;
- use encoding "utf-8";
- use Image::Magick;
- use warnings;
- my $verify ;
- my $f1;
- sub Magick{ #裁切图片
- my ($x,$y)=@_;
- my($image, $p);
- $image = Image::Magick->new;
- $p = $image->Read('c.png');
- $p = $image->Crop(geometry=>"60x30+$x+$y"); #裁切大小,以右上为起点开始裁切
- warn "$p" if "$p";
- $p = $image->Write('x.png');
- warn "$p" if "$p";
- my $tesseract_soft_path = 'c:/Program Files/Tesseract-OCR/tesseract.exe'; #这里是调用ocr解析图片
- my $png_path = 'f:/perl/cu';
- my $tesseract=system ("$tesseract_soft_path" ,"$png_path/x.png","$png_path/x","-l"); #处理图片,默认处理为txt文件
- unless($tesseract){
- open FH,"$png_path/x.txt" or die "$!";
- while(<FH>){
- /(\d{4})(?{$verify=$1})/;
- }
- close FH;
- }
- return 1;
- }
- my $sel = Test::WWW::Selenium->new( host => "localhost", #实例化浏览器
- port => 4444,
- browser => "*chrome",
- browser_url => "http://www.mchina.cn/searchkeyword.html"
- );
- open FA,"uid.txt" or die "$!";
- while(<FA>){
- chomp;
- my $uid =$_;
- while(1 and sleep 4){
- $sel->open_ok("/searchkeyword.html");
- $sel->wait_for_page_to_load_ok("30000");
- $sel->capture_entire_page_screenshot('f:\perl\cu\c.png','background=#CCFFDD'); #将页面制作成png图片
- Magick("660","400"); #裁切图片
- $f1=$sel->get_html_source;
- if($f1 =~ /<div[^>]+center">\s*<font[^>]+red">[\s\S]+?<li><span>.*?<\/span><\/li>/){ #如果验证码不配对,用正则判断,需要裁切的地方需要变换
- Magick("654","420");
- }
- $sel->wait_for_page_to_load_ok("30000");
- if (defined $verify){
- $sel->type_ok("id=keyword", "$uid");
- $sel->type_ok("id=confirmcodekeyword", "$verify");
- $sel->click_ok("css=input.btn");
- $sel->wait_for_page_to_load_ok("60000");
- undef($verify);
- my $err = $sel->get_html_source();
- last unless $err =~ /<div[^>]+center">\s*<font[^>]+red">[\s\S]+?<li><span>.*?<\/span><\/li>/;
- }
- $sel->open_ok("/searchkeyword.html");
- $sel->wait_for_page_to_load_ok("30000");
- $sel->refresh() ;
- }
- my $frame = $sel->select_frame('//iframe');
- if(defined $frame){ #由于是frame构架的,返回的源码中是看不到所需信息的,需要用 select_frame定位
- my $route= $sel->get_html_source();
- my @info;
- if($route =~ /<div[^>]+searchkey">.*?\n.*?([^\s]+)[\s\S]+?
- <div[^>]+keystatus">\s*<font[^>]+>([^<]+)[\s\S]+?
- <div[^>]+regtime">(\S+)[\s\S]+?
- <div[^>]+registerNOforkey">\s*([^\s]*)/x){
- my($name,$status,$regtime,$idnum);
- $name = $1;$status = $2;$regtime = $3 ;$idnum =$4||0;
- push @info ,$uid,$name,$status,$regtime,$idnum;
- }else{
- if($route =~ /<font[^>]+red">\s*([^\s]+)/){
- push @info,$uid,$1};
- }
- open FH,">>output.txt" or die "$!";
- print FH join("\t",@info);
- print FH "\n";
- close FH;
- }
- }
- close FA;
- sleep 500;
- $sel->stop();
三、解释
上面的一段code主要用于查询信息,自动填写验证码,把查询到的结果导入文本。
操作步骤
1.cmd进入刚才下载软件的目录。
执行java -jar selenium-server-standalone-2.25.0.jar(开启后不要关闭这个cmd窗口)
1.运行perl程序
F:\perl\cu>Perl-selenium.pl
运行过程
本文转自 mcshell 51CTO博客,原文链接:http://blog.51cto.com/mcshell/1099589,如需转载请自行联系原作者