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

简介:
很多时候在做测试的人员需要去测试开发人员的新项目,传统的操作是打开浏览器点击各个地方看操作是否流畅,是否会报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,如需转载请自行联系原作者

目录
相关文章
|
1天前
|
数据采集 前端开发 测试技术
《手把手教你》系列技巧篇(三十一)-java+ selenium自动化测试- Actions的相关操作-番外篇(详解教程)
【4月更文挑战第23天】本文介绍了网页中的滑动验证码的实现原理和自动化测试方法。作者首先提到了网站的反爬虫机制,并表示在本地创建一个没有该机制的网页,然后使用谷歌浏览器进行验证。接着,文章详细讲解了如何使用WebElement的click()方法以及Action类提供的API来模拟鼠标的各种操作,如右击、双击、悬停和拖动。
6 2
|
1天前
|
Java 测试技术 持续交付
深入理解与应用Selenium WebDriver进行自动化测试
【4月更文挑战第25天】 在现代软件开发过程中,自动化测试已成为确保产品质量和加速市场发布的关键步骤。Selenium WebDriver作为业界广泛采用的自动化测试工具之一,提供了一种灵活且高效的方式来模拟用户与Web应用程序交互。本文将探讨Selenium WebDriver的核心概念、架构以及实际应用中的技巧和最佳实践。通过深入分析其工作原理及常见问题解决方案,旨在帮助测试工程师提升测试效率,确保测试结果的准确性和可靠性。
|
2天前
|
Web App开发 数据采集 Java
《手把手教你》系列技巧篇(三十)-java+ selenium自动化测试- Actions的相关操作下篇(详解教程)
【4月更文挑战第22天】本文介绍了在测试过程中可能会用到的两个功能:Actions类中的拖拽操作和划取字段操作。拖拽操作包括基本讲解、项目实战、代码设计和参考代码,涉及到鼠标按住元素并将其拖动到另一个元素上或指定位置。划取字段操作则介绍了如何在一段文字中随机选取一部分,包括项目实战、代码设计和参考代码。此外,文章还提到了滑动验证的实现,并提供了相关的代码示例。
30 2
|
4天前
|
前端开发 测试技术 C++
Python自动化测试面试:unittest、pytest与Selenium详解
【4月更文挑战第19天】本文聚焦Python自动化测试面试,重点讨论unittest、pytest和Selenium三大框架。unittest涉及断言、TestSuite和覆盖率报告;易错点包括测试代码冗余和异常处理。pytest涵盖fixtures、参数化测试和插件系统,要注意避免过度依赖unittest特性。Selenium的核心是WebDriver操作、等待策略和测试报告生成,强调智能等待和元素定位策略。掌握这些关键点将有助于提升面试表现。
18 0
|
6天前
|
Web App开发 JavaScript 前端开发
深入理解自动化测试框架Selenium的设计与实现
【4月更文挑战第20天】 在软件测试领域,自动化测试已成为提升测试效率和确保产品质量的关键手段。Selenium作为一款广泛使用的开源自动化测试框架,其设计精巧且功能强大,为Web应用提供了一种灵活、高效的测试解决方案。本文将深入探讨Selenium的核心架构与实现细节,解析其如何通过模拟用户操作来执行测试用例,以及它如何适应不断变化的Web技术标准。通过对Selenium内部机制的剖析,旨在帮助测试工程师更好地掌握该工具,并在测试实践中发挥其最大效能。
|
7天前
|
前端开发 JavaScript Java
《手把手教你》系列技巧篇(二十五)-java+ selenium自动化测试-FluentWait(详细教程)
【4月更文挑战第17天】其实今天介绍也讲解的也是一种等待的方法,有些童鞋或者小伙伴们会问宏哥,这也是一种等待方法,为什么不在上一篇文章中竹筒倒豆子一股脑的全部说完,反而又在这里单独写了一篇。那是因为这个比较重要,所以宏哥专门为她量身定制了一篇。FluentWait是Selenium中功能强大的一种等待方式,翻译成中文是流畅等待的意思。在介绍FluentWait之前,我们来讨论下为什么需要设置等待,我们前面介绍了隐式等待和显式等待。
29 3
|
3月前
|
数据可视化 测试技术 持续交付
自动化测试神器:Python之Pytest库入门使用
自动化测试神器:Python之Pytest库入门使用
100 4
|
2天前
|
测试技术 API 网络架构
Python的api自动化测试 编写测试用例
【4月更文挑战第18天】使用Python进行API自动化测试,可以结合`requests`库发送HTTP请求和`unittest`(或`pytest`)编写测试用例。以下示例: 1. 安装必要库:`pip install requests unittest` 2. 创建`test_api.py`,导入库,定义基础URL。 3. 创建继承自`unittest.TestCase`的测试类,包含`setUp`和`tearDown`方法。 4. 编写测试用例,如`test_get_users`,检查响应状态码和内容。 5. 运行测试:`python -m unittest test_api.py`
12 2
|
2天前
|
JSON 测试技术 API
Python的Api自动化测试使用HTTP客户端库发送请求
【4月更文挑战第18天】在Python中进行HTTP请求和API自动化测试有多个库可选:1) `requests`是最流行的选择,支持多种请求方法和内置JSON解析;2) `http.client`是标准库的一部分,适合需要低级别控制的用户;3) `urllib`提供URL操作,适用于复杂请求;4) `httpx`拥有类似`requests`的API,提供现代特性和异步支持。根据具体需求选择,如多数情况`requests`已足够。
9 3
|
3天前
|
测试技术 持续交付 API
Python的UI自动化测试
【4月更文挑战第17天】Python UI自动化测试涉及Selenium(Web)、Appium(移动应用)和PyQt(桌面应用)等框架。基本步骤包括确定测试目标、选择合适框架、安装配置、编写测试脚本、运行调试以及集成到CI/CD流程。注意自动化测试不能完全取代人工测试,应根据需求平衡使用。
8 1