前世

Selenium RC

早期的Selenium使用的是JavaScript注入技术与浏览器打交道,需要Selenium RC启动一个Server,将操作Web元素的API调用转化为一段段Javascript,在Selenium内核启动浏览器之后注入这段Javascript。开发过Web应用的人都知道,Javascript可以获取并调用页面的任何元素,自如的进行操作。由此才实现了Selenium的目的:自动化Web操作。这种Javascript注入技术的缺点是速度不理想,而且稳定性大大依赖于Selenium内核对API翻译成的Javascript质量高低。

今生

WebDriver

当Selenium2.x 提出了WebDriver的概念之后,它提供了完全另外的一种方式与浏览器交互是。利用浏览器原生的API,封装成一套更加面向对象的Selenium WebDriver API,直接操作浏览器页面里的元素,甚至操作浏览器本身(截屏,窗口大小,启动,关闭,安装插件,配置证书之类)。由于使用的是浏览器原生的API,速度大大提高,而且调用的稳定性交给了浏览器厂商本身,显然是更加科学。然而带来的一些副作用就是,不同的浏览器厂商,对Web元素的操作和呈现多少会有一些差异,这就直接导致了Selenium WebDriver要分浏览器厂商不同,而提供不同的实现。例如Firefox就有专门的FirefoxDriver,Chrome就有专门的ChromeDriver等等。(甚至包括了AndroidDriver和iOS WebDriver)

Selenium3.0发布后,最大更新点就是干掉了对selenium rc的支持,这标志着webdriver协议最终一统江湖,rc毕竟是继子,webdriver才是亲儿子,假儿子给真儿子让路,豪门继承权尘埃落定。

selenium3.0的意味着什么

webdriver 协议现在已经成为业内公认的浏览器UI测试的标准实现。简而言之,做浏览器ui测试,请认准selenium webdriver商标。各种官方支持意味着以后的浏览器UI测试的速度和稳定性会有较大的提升。selenium 2.0时代只有chrome driver是官方出品,其它实现均是第三方。从稳定性上说,2.0时代最稳定的测试浏览器是chrome和firefox,其它浏览器支持均或多或少有些问题。浏览器UI自动化测试已经成为了行业标配。这也是为什么几乎所有浏览器厂商都推出自己官方driver的原因。

RemoteWebDriver(selenium的WebDriver的基类)

启动目标浏览器,并绑定到指定端口。该启动的浏览器实例,做为web driver的remote server,Remote server 需要依赖原生的浏览器组件(如:IEDriver.dll,chromedriver.exe),来转化浏览器的api调用,一些定位元素的api都在该类中。

WebDriver

webdriver是按照server – client的经典设计模式设计的。

webdriver的作用就是创建一个新的浏览器实例,也就是启动一个Server端。

(Starts the service and then creates new instance of chrome driver)

server端就是我们的Remote server,也就是我们通过各个不同浏览器所启动的浏览器实例,在我们脚本启动浏览器后,这个浏览器就可以称之为我们的Remote server,它的职责就是等待client发送请求并做出相应处理。

client 就是我们的测试代码,我们测试代码中的所有操作,比如打开浏览器,寻找元素,点击都是以http请求的方式发送给被测试浏览器,也就是我们的Remote server,remote server接受请求,并执行相应操作,并在response中返回执行状态、返回值等信息(这里调用的接口是浏览器的源生API,而每一个浏览器都有自己的一套接口信息,这也就是为什么我们要安装不同的驱动的原因)

WebDriver工作流程

1、通过WebDriver创建一个浏览器服务,remote server。

2、脚本启动时会在新的线程中启动一个浏览器,并绑定特定的端口,没个浏览器有不同的端口段。

3、client 创建1个session,在该session中通过http请求向remote server发送restful的请求,remote server解析请求,完成相应操作并返回response。

4、分析response,继续执行脚本还是结束执行

command.py

Command类中定义了WebDriver的一些常用的常量。

remote\webdrvier.py

所有浏览器webdrvier的基类,其中包含了所有webdriver的api接口

remote\remote_connection.py

包含启动Remote WebDrvier server,执行client请求,self._commands是selenium的核心请求参数,根据对应的Command常量,发送不同的http请求。

Page Object Model(POM)的优势
1、POM提供了一种在UI层操作、业务流程与验证分离的模式,这使得测试代码变得更加清晰和高可读性
2、对象库与用例分离,使得我们更好的复用对象,甚至能与不同的工具进行深度结合应用
3、可复用的页面方法代码会变得更加优化
4、更加有效的命名方式使得我们更加清晰的知道方法所操作的UI元素。例如我们要回到首页,方法名命名为: gotoHomePage(),通过方法名即可清晰的知道具体的功能实现。

Selenium学习之==>Selenium介绍的更多相关文章

  1. web自动化测试python+selenium学习总结----selenium安装、浏览器驱动下载

    一.安装selenium 命令安装selenium库 :pip  install -U selenium 查看selenium是否安装成功:pip list PS:有时会有异常,安装失败,可以尝试去s ...

  2. 【转】selenium学习路线

    selenium学习路线 配置你的测试环境,真对你所学习语言,来配置你相应的selenium 测试环境.selenium 好比定义的语义---“问好”,假如你使用的是中文,为了表术问好,你的写法是“你 ...

  3. Selenium 学习笔记(一)

    selenium 学习整理 初学者,如果有不当得地方请指出,非常感谢. 准备事项: 1. Python 安装包 安装Python,并勾选添加环境变量. 安装完成后,打开dos窗口,输入python,看 ...

  4. selenium 学习之路开始了,一遍搬一遍理解学习,加油!!!

    selenium 学习之路开始了,一遍搬一遍理解学习,加油!!!

  5. Python + selenium + pycharm 环境部署细节 和selenium、Jenkins简单介绍

    一.测试体系:Python + selenium + pycharm + Jenkins/docker 环境搭建: 1.安装python 3.4/3.5 2/3.6/ 3.7 2.配置环境变量 3.p ...

  6. selenium学习总结

    selenium主要用来做web自动化,分1.0和2.0两个版本,1.0包括selenium IDE.selenium Grid.selenium Remote Control,2.0在1.0的基础上 ...

  7. Selenium学习第二天,了解Selenium工作模式与学习Selenium需要具备的知识与工具。

    Selenium学习网站: 1.http://www.ltesting.net/ceshi/open/kygncsgj/selenium/2014/0408/207237.html——好像是对API的 ...

  8. 【python+selenium学习】Python常见错误之:IndentationError: unexpected indent

    初入python+selenium学习之路,总会遇到这样那样的问题.IndentationError: unexpected indent,这个坑我已经踏进数次了,索性记录下来.都知道Python对代 ...

  9. Selenium学习整理(Python)

    1 准备软件 Selenium IDE firebug-2.0.19.xpi firepath-0.9.7-fx.xpi Firefox_46.0.1.5966_setup.exe 由于火狐浏览器高版 ...

随机推荐

  1. Ubuntu:MySQL与phpmyadmin安装、配置并使用。

    0. 小建议 Ubuntu 16.04.因为MySQL对于Ubuntu 18.04不是很适配,会出现终端MySQL无法输入中文等问题.如果用Ubuntu 18.04,会需要多解决很多细节问题. 建议将 ...

  2. Java JDK下载方法

    https://jingyan.baidu.com/album/574c5219fb033c2c8d9dc194.html?picindex=5  也可以参考这个 ‘’‘’ 大家下载的时候一定要按照步 ...

  3. thinkphp5杂谈--模板

    一种新型开源模板   http://www.h-ui.net/H-ui.admin.shtml 下载页面代码 除了curl以外还可以借助  仿站小工具V7.0,操作示意图

  4. Mapnik使用postgres中的栅格数据

    XML: <?xml version="1.0" encoding="utf-8"?> <Map background-color=" ...

  5. LeetCode - 删除链表的倒数第N个节点

    给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 ...

  6. mysql COUNT()函数 语法

    mysql COUNT()函数 语法 作用:返回匹配指定条件的行数.博智达直线电机平台 语法:SELECT COUNT(*) FROM table_name mysql COUNT()函数 示例 // ...

  7. java实现视频断点上传文件

    一.概述 所谓断点续传,其实只是指下载,也就是要从文件已经下载的地方开始继续下载.在以前版本的HTTP协议是不支持断点的,HTTP/1.1开始就支持了.一般断点下载时才用到Range和Content- ...

  8. strcat()与strcpy()用法

    1.strcpy (1)原型 extern char *strcpy(char *dest,char *src); (2)用法 #include <cstring> (3)功能 把src所 ...

  9. 157. [USACO Nov07] 奶牛跨栏(第三次考试大整理)

    157. [USACO Nov07] 奶牛跨栏 输入文件:hurdles.in   输出文件:hurdles.out   简单对比 时间限制:1 s   内存限制:128 MB 译 by CmYkRg ...

  10. Android学习笔记之数据的Sdcard存储方法及操作sdcard的工具类

    FileService.java也就是操作sdcard的工具类: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ...