WebDriver 原理
WebDriver 是按照 server – client 的经典设计模式设计的。
server 端就是 remote server,可以是任意的浏览器。当我们的脚本启动浏览器后,该浏览器就是 remoteserver,它的职责就是等待 client 发送请求并做出相应。
client 端简单说来就是我们的测试代码,我们测试代码中的一些行为,比如打开浏览器,转跳到特定的 url 等操作是以 http 请求的方式发送给被 测试浏览器,也就是 remote server;remote server 接受请求,并执行相应操作,并在 response 中返回执行状态、返回值等信息。
webdriver 的工作流程:
1. WebDriver 启动目标浏览器,并绑定到指定端口。该启动的浏览器实例,做为 WebDriver 的 remote server。
2. Client 端通过 CommandExcuter 发送 HTTPRequest 给 remote server 的侦听端口(通信协议: the webriver wire protocol)
3. Remote server 需要依赖原生的浏览器组件(如:IEDriverServer.exe、chromedriver.exe),来转化转
化浏览器的 native 调用。
在 Python 提供了 logging 模块,logging 模块给运行中的应用提供了一个标准的信息输出接口。它提供了 basicConfig()方法用于基本信息的定义。将 debug 模块开启。就可以捕捉到客户端与服务器的交互信息。
from selenium import webdriver
import logging
logging.basicConfig(level=logging.DEBUG)
diver = webdriver.Firefox()
diver.get("http://www.baidu.com")
diver.find_element_by_id("kw").send_keys("selenium")
diver.find_element_by_id("su").click()
diver.quit()
运行脚本,basicConfig()所捕捉的 log 信息。不过 basicConfig()开启的 debug 模式只能捕捉到客户端向服务器所发送的 POST 请求,而无法获取服务器所返回应答信息。我们在后面的章节中将会用 Selenium Server,通过 Selenium Server 将会获取到更详细请求与应答信息。
>>> ================================ RESTART ================================
>>>
DEBUG:selenium.webdriver.remote.remote_connection:POST
http://127.0.0.1:34229/hub/session {"desiredCapabilities": {"platform": "ANY",
"browserName": "firefox", "version": "", "javascriptEnabled": true}}
DEBUG:selenium.webdriver.remote.remote_connection:Finished Request
DEBUG:selenium.webdriver.remote.remote_connection:POST
http://127.0.0.1:34229/hub/session/0f0d51f5-affc-4af0-9c45-4b3c4931c601/url
{"url": "http://www.baidu.com", "sessionId":
"0f0d51f5-affc-4af0-9c45-4b3c4931c601"}
DEBUG:selenium.webdriver.remote.remote_connection:Finished Request
DEBUG:selenium.webdriver.remote.remote_connection:POST
http://127.0.0.1:34229/hub/session/0f0d51f5-affc-4af0-9c45-4b3c4931c601/elem
ent {"using": "id", "sessionId": "0f0d51f5-affc-4af0-9c45-4b3c4931c601",
"value": "kw"}
DEBUG:selenium.webdriver.remote.remote_connection:Finished Request
DEBUG:selenium.webdriver.remote.remote_connection:POST
http://127.0.0.1:34229/hub/session/0f0d51f5-affc-4af0-9c45-4b3c4931c601/elem
ent/{12722a5d-58f3-457c-ad5e-348b230c6f6a}/value {"sessionId":
《Selenium2 Python 自动化测试实战》样张
113
"0f0d51f5-affc-4af0-9c45-4b3c4931c601", "id":
"{12722a5d-58f3-457c-ad5e-348b230c6f6a}", "value": ["s", "e", "l", "e", "n", "i",
"u", "m"]}
DEBUG:selenium.webdriver.remote.remote_connection:Finished Request
DEBUG:selenium.webdriver.remote.remote_connection:POST
http://127.0.0.1:34229/hub/session/0f0d51f5-affc-4af0-9c45-4b3c4931c601/elem
ent {"using": "id", "sessionId": "0f0d51f5-affc-4af0-9c45-4b3c4931c601",
"value": "su"}
DEBUG:selenium.webdriver.remote.remote_connection:Finished Request
DEBUG:selenium.webdriver.remote.remote_connection:POST
http://127.0.0.1:34229/hub/session/0f0d51f5-affc-4af0-9c45-4b3c4931c601/elem
ent/{8090ac84-2d92-4b48-8320-dadcfbf15f40}/click {"sessionId":
"0f0d51f5-affc-4af0-9c45-4b3c4931c601", "id":
"{8090ac84-2d92-4b48-8320-dadcfbf15f40}"}
DEBUG:selenium.webdriver.remote.remote_connection:Finished Request
DEBUG:selenium.webdriver.remote.remote_connection:DELETE
http://127.0.0.1:34229/hub/session/0f0d51f5-affc-4af0-9c45-4b3c4931c601
{"sessionId": "0f0d51f5-affc-4af0-9c45-4b3c4931c601"}
DEBUG:selenium.webdriver.remote.remote_connection:Finished Request
WebDriver 原理相关推荐
- WebDriver原理分析
WebDriver原理分析 WebDriver与之前Selenium的JS注入实现不同,直接利用了浏览器native support来操作浏览器.所以对于不同平台,不同的浏览器,必须依赖一个特定的浏览 ...
- webdriver原理(自己做个记录)
webdriver原理: 1. WebDriver 启动目标浏览器,并绑定到指定端口.该启动的浏览器实例,做为web driver的remote server. 2. Client 端通过Comman ...
- selenium webdriver 原理概述
背景 虽然掌握selenium webdriver提供的各种方法,就可以做web的UI自动化,但是本着知其然,也要知其所以然的态度,也为了提升自己.了解下selenium webdriver的原理是必 ...
- Selenium Webdriver原理终于搞清楚了
目录 1. Selenium的历史 2. WebDriver协议 3. Selenium驱动浏览器原理 4. 测试代码与Webdriver的交互 5. Webdriver与浏览器的关系 6. Sele ...
- webdriver原理_(最新版)如何正确移除 Pyppeteer 中的window.navigator.webdriver
摄影:产品经理春天来了~ 在<在Pyppeteer中正确隐藏window.navigator.webdriver >一文中,我们介绍了修改源代码使Pyppeteer 打开的 Chrome ...
- WebDriver API
WebDriver API 1. WebDriver原理: Server------------------------------------------Client http请求request R ...
- selenium webdriver (python)的基本用法一
阅在线 AIP 文档: http://selenium.googlecode.com/git/docs/api/py/index.html 目录 一.selenium+python 环境搭建..... ...
- selenium webdriver使用
selenium使用 引言 1.selenium课程概要 2.selenium的介绍 2.1selenium工作原理 2.2selenium模块与driver的安装 2.2.1 在python虚拟机环 ...
- Java+webdriver的自动化测试框架搭建
一.webdriver简介 webdriver是一种支持web应用程序自动化测试的工具,利用浏览器原生的API,封装成一套更加面向对象的selenium webdriver API,直接操作浏览器里的 ...
最新文章
- Linux自学笔记——haproxy
- cxf生成客户端代码
- torch转onnx错误 exit code -1073741819
- 【数字信号处理】傅里叶变换性质 ( 序列傅里叶变换共轭对称性质示例 | 证明 共轭对称序列 x_e(n) 的 傅里叶变换 是 原序列傅里叶变换 的实部 )
- mysql断网_断网的情况上如何访问本机的mysql
- (转)理解MySQL——索引与优化
- 属性的表示方法和对象的枚举
- MySQL sql trace的使用
- java标签库jstl-el表达式介绍使用配置手册_JAVA EE 实验报告EL表达式和jstl标签库的使用...
- android eclipse更改项目程序桌面图标以及出现的问题?
- PyQt5实现软键盘
- ISE WARNING:ProjectMgmt - File /*filePath*/ is missing.解决方法
- malloc与calloc的区别及实例
- Unity代码生成实例物体
- 如何启用计算机的无线功能键在哪,启动无线功能开关在哪
- 踩坑-helloJs实现google、facebook、twitter等第三方登录
- Status of node rabbit@xxxxx... Error: unable to perform an operation on node ‘rabbit@xxxx
- VS2019中文输出乱码解决方法(C语言)
- 什么是项目生命周期?如何划分项目阶段?有什么意义?
- mysql字符集修改无效,Mysql字符集的修改及查看问题_MySQL