一、webdriver的原理
driver = webdriver.Chrome()创建浏览器,当做我们的服务端,代码就是客户端,和客户端进行ip绑定,基于http协议发送post请求
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的一些常用的常量。
remotewebdrvier.py
所有浏览器webdrvier的基类,其中包含了所有webdriver的api接口
remote emote_connection.py
包含启动Remote WebDrvier server,执行client请求,self._commands是selenium的核心请求参数,根据对应的Command常量,发送不同的http请求。
Page Object Model(POM)的优势
1. POM提供了一种在UI层操作、业务流程与验证分离的模式,这使得测试代码变得更加清晰和高可读性
2. 对象库与用例分离,使得我们更好的复用对象,甚至能与不同的工具进行深度结合应用
3. 可复用的页面方法代码会变得更加优化
4. 更加有效的命名方式使得我们更加清晰的知道方法所操作的UI元素。例如我们要回到首页,方法名命名为: gotoHomePage(),通过方法名即可清晰的知道具体的功能实
二、Selenium-WebDriverApi接口详解
18种定位方式:8种单数、8种复数、2种父类形式
(1)xpath定位方式
//* 取整个页面下的所有元素