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 原理相关推荐

  1. WebDriver原理分析

    WebDriver原理分析 WebDriver与之前Selenium的JS注入实现不同,直接利用了浏览器native support来操作浏览器.所以对于不同平台,不同的浏览器,必须依赖一个特定的浏览 ...

  2. webdriver原理(自己做个记录)

    webdriver原理: 1. WebDriver 启动目标浏览器,并绑定到指定端口.该启动的浏览器实例,做为web driver的remote server. 2. Client 端通过Comman ...

  3. selenium webdriver 原理概述

    背景 虽然掌握selenium webdriver提供的各种方法,就可以做web的UI自动化,但是本着知其然,也要知其所以然的态度,也为了提升自己.了解下selenium webdriver的原理是必 ...

  4. Selenium Webdriver原理终于搞清楚了

    目录 1. Selenium的历史 2. WebDriver协议 3. Selenium驱动浏览器原理 4. 测试代码与Webdriver的交互 5. Webdriver与浏览器的关系 6. Sele ...

  5. webdriver原理_(最新版)如何正确移除 Pyppeteer 中的window.navigator.webdriver

    摄影:产品经理春天来了~ 在<在Pyppeteer中正确隐藏window.navigator.webdriver >一文中,我们介绍了修改源代码使Pyppeteer 打开的 Chrome ...

  6. WebDriver API

    WebDriver API 1. WebDriver原理: Server------------------------------------------Client http请求request R ...

  7. selenium webdriver (python)的基本用法一

    阅在线 AIP 文档: http://selenium.googlecode.com/git/docs/api/py/index.html 目录 一.selenium+python 环境搭建..... ...

  8. selenium webdriver使用

    selenium使用 引言 1.selenium课程概要 2.selenium的介绍 2.1selenium工作原理 2.2selenium模块与driver的安装 2.2.1 在python虚拟机环 ...

  9. Java+webdriver的自动化测试框架搭建

    一.webdriver简介 webdriver是一种支持web应用程序自动化测试的工具,利用浏览器原生的API,封装成一套更加面向对象的selenium webdriver API,直接操作浏览器里的 ...

最新文章

  1. Linux自学笔记——haproxy
  2. cxf生成客户端代码
  3. torch转onnx错误 exit code -1073741819
  4. 【数字信号处理】傅里叶变换性质 ( 序列傅里叶变换共轭对称性质示例 | 证明 共轭对称序列 x_e(n) 的 傅里叶变换 是 原序列傅里叶变换 的实部 )
  5. mysql断网_断网的情况上如何访问本机的mysql
  6. (转)理解MySQL——索引与优化
  7. 属性的表示方法和对象的枚举
  8. MySQL sql trace的使用
  9. java标签库jstl-el表达式介绍使用配置手册_JAVA EE 实验报告EL表达式和jstl标签库的使用...
  10. android eclipse更改项目程序桌面图标以及出现的问题?
  11. PyQt5实现软键盘
  12. ISE WARNING:ProjectMgmt - File /*filePath*/ is missing.解决方法
  13. malloc与calloc的区别及实例
  14. Unity代码生成实例物体
  15. 如何启用计算机的无线功能键在哪,启动无线功能开关在哪
  16. 踩坑-helloJs实现google、facebook、twitter等第三方登录
  17. Status of node rabbit@xxxxx... Error: unable to perform an operation on node ‘rabbit@xxxx
  18. VS2019中文输出乱码解决方法(C语言)
  19. 什么是项目生命周期?如何划分项目阶段?有什么意义?
  20. mysql字符集修改无效,Mysql字符集的修改及查看问题_MySQL

热门文章

  1. 3. 打包python应用程序
  2. Python 的应用领域有哪些呢
  3. KNN回归算法【配有案例演示】
  4. 爬虫练习四:爬取b站番剧字幕
  5. flac格式怎么转换成mp3?
  6. oracle联合主键 为空,笔记 oracle 创建联合主键
  7. Android 进程/内存管理误区
  8. Mac中终端关机命令
  9. 正当防卫CSP(content security policy)
  10. PHP图像基本操作绘制圣诞雪花图