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

本文涉及的产品
通用文字识别,通用文字识别 200次/月
教育场景识别,教育场景识别 200次/月
个人证照识别,个人证照识别 200次/月
简介:
很多时候在做测试的人员需要去测试开发人员的新项目,传统的操作是打开浏览器点击各个地方看操作是否流畅,是否会报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窗口)
 

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

 

运行过程

 










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

目录
相关文章
|
7天前
|
Web App开发 存储 安全
Python编写脚本,打开浏览器输入网址,自动化登陆网站
Python编写脚本,打开浏览器输入网址,自动化登陆网站
13 4
|
12天前
|
Web App开发 JavaScript Java
自动化测试的利剑:Selenium WebDriver入门与实践
【9月更文挑战第21天】在软件开发的海洋中,自动化测试犹如一艘船,帮助开发者们快速航行至质量保证的彼岸。本文将作为你的罗盘,指引你了解和掌握Selenium WebDriver这一强大的自动化测试工具。通过深入浅出的方式,我们将探索Selenium WebDriver的基本概念、安装过程以及编写简单测试脚本的方法。无论你是刚接触自动化测试的新手,还是希望提升测试技能的开发者,这篇文章都将为你提供有价值的指导。
|
11天前
|
Web App开发 测试技术 持续交付
自动化测试的利器:Selenium与Python的完美结合
【9月更文挑战第21天】在软件开发的世界里,测试是确保产品质量的关键步骤。随着敏捷开发和持续集成的流行,自动化测试工具变得尤为重要。本文将介绍如何使用Selenium和Python进行高效的自动化测试,不仅提供代码示例,还深入探讨如何设计测试用例、选择正确的测试框架、以及如何整合到CI/CD流程中。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用的技巧。
23 3
|
24天前
|
Web App开发 Java 测试技术
自动化测试的利器:Selenium WebDriver入门与实践
【9月更文挑战第8天】在软件开发的海洋中,测试是确保我们不会溺水的那根救生索。Selenium WebDriver,作为自动化测试的明星工具,让这根救生索更加结实可靠。本文将带你快速上手Selenium WebDriver,从基础设置到实际操作,再到实战演练,让你的开发之旅更加平稳顺畅。
|
18天前
|
敏捷开发 Java 测试技术
探索自动化测试的奥秘:从Selenium到Appium
【9月更文挑战第14天】软件测试,这个看似枯燥乏味却至关重要的领域,正经历着一场革命。随着技术的进步,自动化测试工具如Selenium和Appium已成为质量保证的利器。本文将带你一探这些工具的神秘面纱,了解它们如何简化测试流程、提升效率,并确保软件产品的质量。准备好,我们将深入自动化测试的世界,解锁其背后的原理和实践技巧。
|
8天前
|
Web App开发 Linux Python
linux上安装selenium环境及测试
该文章提供了在Linux CentOS上安装Selenium环境、Chrome浏览器及Chromedriver的详细步骤,并演示了如何以无头模式进行测试。
22 0
|
20天前
|
敏捷开发 测试技术 持续交付
自动化测试之美:如何用Selenium和Python打造高效测试脚本
【9月更文挑战第13天】在软件开发的海洋中,自动化测试是那抹不可或缺的亮色。它不仅提升了测试效率,还保障了产品质量。本文将带你领略使用Selenium和Python构建自动化测试脚本的魅力所在,从环境的搭建到脚本的编写,再到问题的排查,每一步都是对软件质量把控的深刻理解和实践。让我们开始这段探索之旅,解锁自动化测试的秘密吧!
14 0
|
20天前
|
JavaScript 前端开发 测试技术
Selenium2Library实现基于GUI的测试
Selenium2Library实现基于GUI的测试
27 0
|
21天前
|
移动开发 JSON Java
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
98 7
Jmeter实现WebSocket协议的接口测试方法
|
21天前
|
JSON 移动开发 监控
快速上手|HTTP 接口功能自动化测试
HTTP接口功能测试对于确保Web应用和H5应用的数据正确性至关重要。这类测试主要针对后台HTTP接口,通过构造不同参数输入值并获取JSON格式的输出结果来进行验证。HTTP协议基于TCP连接,包括请求与响应模式。请求由请求行、消息报头和请求正文组成,响应则包含状态行、消息报头及响应正文。常用的请求方法有GET、POST等,而响应状态码如2xx代表成功。测试过程使用Python语言和pycurl模块调用接口,并通过断言机制比对实际与预期结果,确保功能正确性。
97 3
快速上手|HTTP 接口功能自动化测试
下一篇
无影云桌面