欢迎来到DIVCSS5查找CSS资料与学习DIV CSS布局技术!
  一、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