如何利用selenium写自动化测试脚本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何利用selenium写自动化测试脚本相关的知识,希望对你有一定的参考价值。

一开始,基本上很多人都是用selenium IDE录制脚本开始的,我也是!有一本书写得很不错:selenium初学者指南!So,从录制回放开始我的selenium,而在这个过程中,不断地去补充我的html css知识,熟悉selenium的api!

慢慢地,发现录制的脚本在回放的时候经常报错,通过检查发现,是定位上的错误,导致这种定位的错误的最大原因是系统前端采用了某种框架,如tigerUI,exj....所以HTML里面的标签很多都是动态的,比如id,class,name!这对selenium操作定位的元素而进行自动化来说是致命伤!

所以,开始自己写定位信息,这已经是必须的了!从而学习了xpth和css选择器,掌握了更加有效,快速和稳定地定位页面上的元素(定位的时候难免会碰到有iframe,这就得先切换到iframe中再进行定位了)!也就是,在selenium IDE上写脚本!

信心满满地在selenium IDE上写了长长地一段脚本,并且反复跑都能成功!总算尝到了一点点幸福的滋味!然后呢,问题来了,当我要修改和扩展这段的脚本的时候,才发现这效率是相当地低!一句句查!一句句改!多么痛的领悟!

另外,selenium IDE 默认启动的是火狐,在使用selenium RC 启动 IE 进行跑脚本时浏览器总是会报错!各种搞不定,各种不淡定!决定放弃使用IDE!

selenium有一个强大之处就是支持多种语方:java,C#,python等等,并且可以把录制的脚本转换成代码!我用的是java,果断走起!

不用说,当然是把脚本转为java代码了,在E www.hbbz08.com clipse中重新开始搞!

选择一个测试框架:有Junit和TestNg两个选择,公司用的是junit,所以,不用多说,我就用junit验证selenium脚本的运行结果!并且,Junit和TestNG都可以生成比较直观的测试报告!

写好一些代码,会看到整段代码中密密麻麻充斥着基本相同的代码:开始封装代码!把常用到API封装起来!封装好之后代码看着就舒服多了!

接下来,是不是也应该把代码中的定位信息用一个专门的文件放起来,再去读取里面的定位信息,这样,维护代码和维护定位信息就放在了两个地方,不用老是扎在代码和定位路径中,简单地分一下层!果断尝试!
参考技术A 一开始,基本上很多人都是用selenium IDE录制脚本开始的,我也是!有一本书写得很不错:selenium初学者指南!So,从录制回放开始我的selenium,而在这个过程中,不断地去补充我的html css知识,熟悉selenium的api!

慢慢地,发现录制的脚本在回放的时候经常报错,通过检查发现,是定位上的错误,导致这种定位的错误的最大原因是系统前端采用了某种框架,如tigerUI,exj....所以HTML里面的标签很多都是动态的,比如id,class,name!这对selenium操作定位的元素而进行自动化来说是致命伤!

所以,开始自己写定位信息,这已经是必须的了!从而学习了xpth和css选择器,掌握了更加有效,快速和稳定地定位页面上的元素(定位的时候难免会碰到有iframe,这就得先切换到iframe中再进行定位了)!也就是,在selenium IDE上写脚本!

信心满满地在selenium IDE上写了长长地一段脚本,并且反复跑都能成功!总算尝到了一点点幸福的滋味!然后呢,问题来了,当我要修改和扩展这段的脚本的时候,才发现这效率是相当地低!一句句查!一句句改!多么痛的领悟!

另外,selenium IDE 默认启动的是火狐,在使用selenium RC 启动 IE 进行跑脚本时浏览器总是会报错!各种搞不定,各种不淡定!决定放弃使用IDE!

selenium有一个强大之处就是支持多种语方:java,C#,python等等,并且可以把录制的脚本转换成代码!我用的是java,果断走起!

不用说,当然是把脚本转为java代码了,在E www.hbbz08.com clipse中重新开始搞!

选择一个测试框架:有Junit和TestNg两个选择,公司用的是junit,所以,不用多说,我就用junit验证selenium脚本的运行结果!并且,Junit和TestNG都可以生成比较直观的测试报告!

写好一些代码,会看到整段代码中密密麻麻充斥着基本相同的代码:开始封装代码!把常用到API封装起来!封装好之后代码看着就舒服多了!

接下来,是不是也应该把代码中的定位信息用一个专门的文件放起来,再去读取里面的定位信息,这样,维护代码和维护定位信息就放在了两个地方,不用老是扎在代码和定位路径中,简单地分一下层!果断尝试!

如何使用Selenium-Grid

  Selenium
Grid是一种自动化的测试辅助工具,Grid通过利用现有的计算机基础设施,能加快Web-app的功能测试。利用Grid,可以很方便地同时在多台机器上和异构环境中并行运行多个测试事例。

  Selenium Grid基于Web-app测试工具Selenium,可以同时并行运行多个Selenium Remote
Control。比较好的一点事,使所有这些Selenium Remote Control显示为一个,这样在测试中就可以不必操作具体的计算机。

  使用方法:

  准备:

  1. 下载安装ant

  解压包到选择的任意目录,然后将解压路径/apache-ant-1.7.0/bin 添加的Path变量中。

  最后验证安装:

  $ ant -version

  Apache Ant version 1.7.0 compiled on December 13 2006

  2. 下载安装JDK 1.6

  http://www.java.com/en/download/index.jsp

  安装后添加java的bin目录到path变量,然后验证:

  $java -version

  java version "1.6.0"

  Java(TM) SE Runtime Environment (build 1.6.0-b105)

  Java HotSpot(TM) Server VM (build 1.6.0-b105, mixed mode)

  3. 下载Selenium Grid

  http://selenium-grid.seleniumhq.org/download.html

  其中,zip是Windows平台的,tar.bz2用于其他平台。下载后解压缩,然后验证:

  $cd <你的grid目录>

  $ant sanity-check

  运行:

  1. 运行Selenium Grid

  $ ant launch-hub

  通过浏览器访问Selenium Grid控制台验证Selenium Grid启动成功:

  http://localhost:4444/console

  2. 运行Selenium Remote Control

  与Grid在同一台机器上,只要指定不同的端口号,就可以运行多个RC在同一台机器上:

  $ant -Dport=5556 launch-remote-control

  $ant -Dport=5557 launch-remote-control

  $ant -Dport=5558 launch-remote-control

  运行后,通过访问Grid控制台,验证RC注册成功:
参考技术A
"host": null,
"port": 4444,
"newSessionWaitTimeout": -1,
"servlets" : [],
"prioritizer": null,
"capabilityMatcher": "org.openqa.grid.internal.utils.DefaultCapabilityMatcher",
"throwOnCapabilityNotPresent": true,
"nodePolling": 5000,

"cleanUpCycle": 5000,
"timeout": 300000,
"browserTimeout": 0,
"maxSession": 5
本回答被提问者和网友采纳

以上是关于如何利用selenium写自动化测试脚本的主要内容,如果未能解决你的问题,请参考以下文章

Python+Selenium基础篇之5-第一个完整的自动化测试脚本

怎样利用自动化工具做真实的项目

selenium之自动化测试脚本的模块化设计

Selenium_python自动化第一个测试案例(代码基本规范)

Selenium课程

如何提高自动化测试的执行效率 selenium java