一、selenium介绍
selenium主要用于web应用程序的自动化测试,还支持所有基于web的管理任务自动化。
selenium经历了2个版本,selenium1.0和selenium2.0;selenium不是一个单独的工具,而是由一些插件、类库构成,每个组成部分都有其特点和应用场景。
selenium2.0由以下组件构成:
selenium2.0=selenium1.0 + Webdriver
Webdirver:通过原生浏览器支持或扩展来直接控制浏览器,针对各个浏览器开发,与浏览器紧密集成,支持创建更高级的测试,其还可以利用操作系统级的调用,模拟用户输入;
selenium IDE:嵌入到Firefox浏览器中的一个插件,实现简单的浏览器操作录制与回放功能,主要用于快速创建BUG及重现脚本,可转化为多种语言;
selenium Gird:测试辅助工具,利用现有的计算机基础设施,实现多台计算上和异构环境中运行测试用例;
selenium RC:selenium的核心组件,支持多种不同语言编写自动化测试脚本,通过其服务器作为代理服务器去访问应用,达到测试的目的;
Client Libraries:Client Libraries库主要用于编写测试脚本,用来控制Selenium Server的库;
Selenium Server:负责控制浏览器行为;
Selenium Core(一个JavaScript函数集合):被嵌入到浏览器中,通过它实现用程序对浏览器进行操作;
Launcher:用于启动浏览器,把Core加载到浏览器页面当中,并把浏览器代理设置为Selenium Server的HTTP Proxy;
二、环境搭建
1、安装python
登录Python官网,找到download,选择与自身平台(Windows/Linux)相符的版本下载(建议3.5+),然后安装即可;
注意:安装时选择安装界面的“Add Python 3.x to PATH”进行勾选,避免再次配置环境变量;
安装完成后通过Windows命令提示符CMD输入“python”,查看是否安装成功,如下图所示:
如上图所示,则证明安装成功;
2、安装setuptools与pip
setuptools是PEAK(Python enterprise Application Kit)的一个副项目,是python的distutilsde的增强工具,可以更方便创建和发布python包,特别是对其他包有依赖的情况;
pip是一个安装和管理python包的工具,通过pip来安装python包将变得很简单,省去了繁琐的过程,pip的安装依赖于setuptools,安装pip之前需要先安装setuptools;
注意:python目前不支持setuptools,因此需要使用distribute;
setuptools与pip的下载地址如下:
setuptools:
pip:
注意: 最新版的python安装包中已经集成了pip,可以在安装目录下的script路径下查看是否有pip.exe或pip3.exe文件,如果有,则cmd命令行中输入pip进行验证;
如上图所示,则证明已经安装pip;
3、安装selenium
完成上面2个步骤之后,可以通过cmd命令直接安装selenium包,如下图所示:
注意:安装时如果只输入包名,则默认安装当前库中的最新版本,如果想安装自己需要的版本,则需要在包名后面加上版本号,比如:
pip install selenium==2.48.0
4、下载浏览器驱动
前面说过,selenium支持多种浏览器,所以只需要下载对应的浏览器驱动,将解压得到的exe文件放到python的安装目录下即可;
各个浏览器驱动下载地址:
5、调试
打开一款python编译器,输入下面的代码,运行,查看是否成功调用浏览器运行,如果运行成功,则说明已成功搭建好自动化开发环境;
一、WebDriver原理
1、关于WebDriver
设计模式:按照Server-Client的经典设计模式设计;
Server端:即Remote Server(远程服务器),可以是任意的浏览器,当脚本启动浏览器时,该浏览器就是Remote Server,它的职责是等待Client发送请求并做出响应;
Client端:简单来说就是我们的测试代码,测试代码中的一些行为是以HTTP请求的方式发送给被测试浏览器——Remote Server,Remote Server接受请求,执行相应操作,
并在Response中返回执行状态、返回值等信息;
2、WebDriver工作流程
①WebDriver启动目标浏览器,并绑定至指定端口,启动的浏览器实例将作为WebDriver的Remote Server;
②Client端通过CommandExcuter发送HTTPRequest给Remote Server的侦听端口(通信协议:the webdriver wire protocol);
③Remote Server需要依赖原生的浏览器组件(比如:chromedriver.exe)来转化浏览器的native调用;
3、WebDriver.log
python提供了logging模块给运行中的应用,提供了一个标准的信息输出接口。它提供了basicConfig方法用于基本信息的定义,开启debug模块,
就可以捕捉到Client端向Server端发送的请求,例子如下:
二、WebDriver定位方法
WebDriver是基于selenium设计的操作浏览器的一套API,针对多种编程语言都实现了这套API,站在python角度来说,WebDriver是python的一个用于实现Web自动化的第三方库。
1、WebDriver定位方法
WebDriver定位方法提供了八种元素定位方法,所对应的方法、特性分别是:
2、XPath和CSS的类似功能对比
3、用By定位元素
针对前面介绍的8种定位方法,WebDriver还提供另一种方法,即:统一调用find_element()方法,通过By来声明定位方法,并且传入对应定位方法的定位参数,例子如下:
find.element()方法只用于定位元素,它需要两个参数,第一个参数是定位的类型,由By提供,第二个参数是定位的具体方式,在使用By之前需要将By类导入;
4、定位一组元素
上面提到的8种定位方法,都是针对单个元素定位的,webdriver还提供了与之对应的8种用于定位一组元素的方法。其一般应用于以下场景:
①批量操作元素,例如勾选页面上所有的复选框;
②先获取一组元素,再从这组元素中过滤出需要操作的元素;
定位一组元素的方法与定位单个元素的用法相似,唯一的区别是在element后面多一个s表示复数,具体如下:
获取一组元素中某个元素的几个方法:
len():用来计算元素的个数,通过print()打印出计算的结果;
pos()或pop(-1):默认获取一组元素的最后一个元素,并返回该元素的值;
pop(0):默认获取一组元素的第一个元素,并返回该元素的值;
pop(1):默认获取一组元素的第二个元素,并返回该元素的值;
……
三、WebElement接口常用方法
通常需要与页面交互的方法都由WebElement接口提供,包括上面提到的8种定位方法,下面介绍常用的几种方法:
submit():用于提交表单,例如搜索框输入关键字之后的“回车”操作,例如:
注意:有时候submit()方法和click()方法可以互用,但submit()的应用范围不及click()广泛;
clear():清除文本;
send_keys(*value):模拟按键输入;
click():单击元素;
size:返回元素的尺寸;
text:获取元素的文本;
get.attribute(name):获得属性值;
is_displayed():设置该元素是否用户可见;
一、控制浏览器
webdriver主要提供操作页面上各种元素的方法,但它也提供操作浏览器的一些方法,例如控制浏览器大小、前进和后退等。
1、控制浏览器窗口大小
2、全屏显示
webdriver提供了maximize_window()方法使打开的浏览器全屏显示,其用法与set_window_size()相同。
3、控制浏览器前进、后退
现在的浏览器在浏览网页时都提供了前进和后退功能,webdriver也提供了对应的forward()和back()方法,来模拟前进和后退按钮:
为了看清脚本执行过程,每一步的操作都通过print()打印当前的URL地址,执行结果如下:
now access
now access
back to
froward to
4、模拟浏览器前刷新
一般我们刷新页面都是通过F5或者页面上的刷新按钮,webdriver也提供了刷新方法refresh(),用来模拟页面刷新:
……
# 刷新当前页面
driver.refresh()
……
二、鼠标事件
在webelement接口提供的方法中,可以通过click()来模拟鼠标单击操作,但实际上鼠标交互方式很多,例如:右击、悬停、鼠标拖动等功能;
webdriver提供了ActionChains类,封装了鼠标操作的常用方法:
perform():执行所有的ActionChains中存储的行为
context_click():鼠标右击
double_click():鼠标双击
drag_and_drop():鼠标拖动
move_to_element():鼠标悬停
1、鼠标右击操作
2、鼠标悬停
鼠标悬停弹出下拉菜单也是一个十分常见的功能设计,move_to_element()方法可以模拟鼠标悬停动作,其用法与context_click()相同;
3、鼠标双击操作
double_click()方法用于模拟鼠标双击操作;
4、鼠标拖放操作
drag_and_drop(source,target)在源元素上按住鼠标左键,然后移动到目标元素上释放;
source:鼠标拖动的源元素
target:鼠标释放的目标元素
如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h60818.shtml