目录
WebDriver 介绍
WebDriver提供了另外一种方式与浏览器进行交互。利用浏览器原生API,封装成一套更加面向对象的Selenium WebDriver API,直接操作浏览器页面里的元素,甚至操作浏览器本身(截屏,窗口大小,启动,关闭,安装插件,配置证书之类的)
WebDriver是W3C的一个标准,由Selenium主持,WebDriver之所以能够实现与浏览器进行交互,是因为浏览器实现了这些协议,这个协议使用JOSN通过HTTP进行传输
WebDriver使用了经典的Client-Server模式,即客户端发送一个requset,服务器端返回一个response
Firefox浏览器直接实现了WebDriver的通讯协议,Chrome和IE则是通过ChromeDriver和InternetExplorerDriver实现的
WebDriver 工作流程
1. 实例化WebDriver,Selenium首先会确认浏览器的native component是否存在可用而且版本匹配。若匹配WebDriver 将会启动一个浏览器驱动,并绑定到指定端口,该启动的浏览器实例,做为 WebDriver 的 remote server, 该服务器用于接收控制浏览器的命令
(控制浏览器的命令必须遵循 WebDriver Protocol 协议格式,该格式定义了一个所有WebDriver都必须实现的RESTish JSON API接口,这套协议非常之强大,几乎可以操作浏览器做任何事情,包括打开、关闭、最大化、最小化、元素定位、元素点击、文件上传等等)
2. Client 端通过 CommandExcuter 发送 HTTPRequest 给 remote server 的侦听端口(通信协议: the webriver wire protocol)
发送请求时,WebDriver的HttpCommandExecutor类将命令作为key,将命令转换为URL作为value,一起存入map作为request,同时会在request的相应的By Xpath、id、name存放在body中
实际发送的URL都是相对路径,后缀多以/session/:sessionId开头,意味着WebDriver每次启动浏览器都会分配一个独立的sessionId
比如find_element_by_id接口,会转化为/session/:sessionId/element这个url,然后在Body内附上具体的参数,比如id的值,json内容为{"using":"id","value":"test"}
3. Remote server 需要依赖原生的浏览器组件(如:IEDriverServer.exe、chromedriver.exe),转化为浏览器的 native 调用
4. 浏览器收到并执行了操作之后,回复一个Http Response,内容为Json格式,会返回找到的element的各种细节,比如text、tag name、class name等等
WebDriver HTTP返回状态码
详细参考: