注:学会根据执行顺序看底层代码web
《如下内容摘自大师兄博客》chrome
WebDriver设计模式
webdriver是按照server – client的经典设计模式设计的。api
webdriver的做用就是建立一个新的浏览器实例,也就是启动一个Server端。浏览器
(Starts the service and then creates new instance of chrome driver)restful
server端就是咱们的Remote server,也就是咱们经过各个不一样浏览器所启动的浏览器实例,在咱们脚本启动浏览器后,这个浏览器就能够称之为咱们的Remote server,它的职责就是等待client发送请求并作出相应处理。session
client 就是咱们的测试代码,咱们测试代码中的全部操做,好比打开浏览器,寻找元素,点击都是以http请求的方式发送给被测试浏览器,也就是咱们的Remote server,remote server接受请求,并执行相应操做,并在response中返回执行状态、返回值等信息(这里调用的接口是浏览器的源生API,而每个浏览器都有本身的一套接口信息,这也就是为何咱们要安装不一样的驱动的缘由)工具
WebDriver工做流程测试
一、经过WebDriver建立一个浏览器服务,启动的浏览器实例将做为WebDriver 的 remote server。优化
二、脚本启动时会在新的线程中启动一个浏览器,并绑定特定的端口,每一个浏览器有不一样的端口段。
三、client 建立1个session,在该session中经过http请求向remote server发送restful(HTTPRequest)的请求,remote server解析请求,完成相应操做并返回response。
四、分析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(),经过方法名便可清晰的知道具体的功能实现。