Selenium Webdriver 实现原理详解

news2024/12/28 6:04:05

目录

1. Selenium 概述

2. 术语解释:

3. Selenium WebDriver 实现原理

4. 安装selenium 客户端,浏览器,驱动 

4.1 安装selenium client lib

4.2 安装浏览器和浏览器驱动

4.3 例子代码

4.4 省略浏览器驱动的方法

4.5 测试代码与Webdriver的交互

5. Webdriver与浏览器的关系


1. Selenium 概述

​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​
Selemium是一款跨浏览器web应用程序自动化测试工具,其发展经历了三个阶段:Selenium Core、Selenium RC 和 Selenium WebDriver,现在每个浏览器都实现了 w3c WebDriver 接口,都有自己的驱动程序。

WebDriver 的开发人员倾向于向用户隐藏其并不关心的很多细节,提供尽可能简单的 API,好让用户聚焦在用例设计和发现 Bug 上。

2. 术语解释:

  • W3C WebDriver 是由 chrome WebDriver 发展而来的浏览器自动化协议,又称 WebDriver 协议 / WebDriver 规范 / WebDriver API
  • Driver 是 WebDriver API 的特定实现,比如 Chrome 浏览器的 ChromeDriver。
  • ChromeDriver 是一个可以独立运行的服务器程序,它实现了 WebDriver 协议。
  • Selenium WebDriver 是2009年8月由 Selenium 1.0 和 WebDriver 项目合并而成,遵循 w3c WebDriver 协议,早期又称作 Selenium 2.0 WebDriver。

3. Selenium WebDriver 实现原理

  • 对于每一条Selenium脚本,一个http请求会被创建并且发送给浏览器的驱动
  • 浏览器驱动中包含了一个HTTP Server,用来接收这些http请求
  • HTTP Server接收到请求后根据请求来具体操控对应的浏览器
  • 浏览器执行具体的测试步骤
  • 浏览器将步骤执行结果返回给HTTP Server
  • HTTP Server又将结果返回给Selenium的脚本

WebDriver基于的协议:JSON Wire protocol JSON Wire protocol是在http协议基础上,对http请求及响应的body部分的数据的进一步规范。body部分主要传送具体的数据,在WebDriver中这些数据都是以JSON的形式存在并进行传送的,这就是JSON Wire protocol。所以在Client和Server之间,只要是基于JSON Wire Protocol来传递数据,就与具体的脚本语言无关了,这样同一个浏览器的驱动就即可以处理Java语言的脚本,也可以处理Python语言的脚本了。

4. 安装selenium 客户端,浏览器,驱动 

4.1 安装selenium client lib

不同的编程语言选择不同的Selenium客户端库。 对应我们Python语言来说,Selenium客户端库的安装非常简单,用 pip 命令即可。

打开 命令行程序,运行如下命令:

pip install selenium

如果安装不了,可能是网络问题,可以指定使用国内的豆瓣源

pip install selenium -i https://pypi.douban.com/simple/

4.2 安装浏览器和浏览器驱动

浏览器驱动 是和 浏览器对应的。 不同的浏览器 需要选择不同的浏览器驱动。 https://www.google.cn/chrome/

https://chromedriver.storage.googleapis.com/index.html

4.3 例子代码

下面的代码, 可以自动化的 打开Chrome浏览器,并且自动化打开百度网站,可以大家可以运行一下看看。

from selenium import webdriver

from selenium.webdriver.chrome.service import Service

# 创建 WebDriver 对象,指明使用chrome浏览器驱动

wd = webdriver.Chrome(service=Service(r'd:\tools\chromedriver.exe'))

# 调用WebDriver 对象的get方法 可以让浏览器打开指定网址

wd.get('https://www.baidu.com') 

4.4 省略浏览器驱动的方法

我们可以把浏览器驱动 所在目录 加入环境变量 Path ,

写代码时,就可以无需指定浏览器驱动路径了,

像下面这样: wd = webdriver.Chrome()

一定要注意的是, 加入环境变量 Path 的, 不是浏览器驱动全路径,比如 d:\tools\chromedriver.exe 而是 浏览器驱动所在目录,比如 d:\tools 而且设置完环境变量后,别忘了重启IDE(比如 PyCharm) 新的环境变量才会生效。

4.5 测试代码与Webdriver的交互

接下来我会以获取界面元素这个基本的操作为例来分析两者之间的关系。
在测试代码中,我们第一步要做的是新建一个webdriver类的对象:

wd = webdriver.Chrome()

这里新建的driver对象是一个webdriver.Chrome()类的对象,而webdriver.Chrome()类的本质是

from chrome.webdriver import WebDriver as Chrome

5. Webdriver与浏览器的关系

这一部分属于各个浏览器开发者和Webdriver开发者的范畴,所以我们不需要太关注,我们所关心的主要还是测试代码和Webdriver的关系,就好像出租车驾驶员如何驾驶汽车我们不需要关心一样。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/126586.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MAC控制器驱动

嵌入式Linux开发模式下,以太网硬件架构一般都是 MAC与PHY是独立的。所以以太网模块的硬件相关的驱动代码主要包括 GMAC 和 PHY,其中MAC控制器驱动由SoC厂商开发,PHY芯片驱动由PHY厂商开发,PHY 驱动一般使用通用 PHY 驱动&#xff…

无线烧录器(2)

传送门:连接 继上次完成了ESP32无线烧录器。那么有一个问题就是,一堆人都在一起想用这个来无线烧录呢,那么固件中定死的热点名称岂不是会互相的扰乱。所以需要自己编译属于自己的热点名称。 首先需要准备以下几样东西。 Ubuntu (需…

excel数据透视表:善用这些功能,提高工作效率!下篇

在上篇文章中,我们为大家分享了透视表的前5条妙用,分别是合并同类项、按条件汇总数据、统计非重复数据、排名、批量创建表格,不知道大家都还记得吗?那么今天我们书接上回,继续为大家分享关于透视表的后5条妙用。 六、…

密码学_SM4国密算法

目录 简介 两类参数 加密流程 RKi和Ki4的生成方法 Xi4的生成方法​编辑 左移的概念 简介 在商用密码体系中,SM4主要用于数据加密,其算法公开,分组长度与密钥长度均为128bit,加密算法与密钥扩展算法都采用32轮非线性迭代结构&…

2022年终总结——脚踏实地,勇敢做自己

不知不觉又来到了年尾,即便都要迈入2023年了,但是在写日期的时候还会下意识的写成2021,这可能就是感觉一年额外漫长的原因吧。其实还是不希望过年的,毕竟跨过了新年要长岁了,看着日益增长的年岁还是会有点难过的&#…

JVM- 第一章-JVM与Java体系结构

JVM-第一章-JVM与Java体系结构1.1. 前言1.2开发人员如何看待上层框架1.3架构师每天都在思考什么?1.4我们为什么要学习JVM1.5 Java VS C1.6面向人群及参考书籍1.1. 前言 作为Java工程师的你曾被伤害过吗?你是否也遇到过这些问题? ● 运行着…

尚医通-数据字典添加缓存-配置nginx(十五)

目录: (1)后台系统 数据字典-添加缓存 (2)后台系统配置nginx (1)后台系统 数据字典-添加缓存 Spring Cache Redis 缓存数据 Spring Cache 是一个非常优秀的缓存组件。自Spring 3.1起&#xff…

CSDN第19次竞赛题解与总结

2022/12/28 19:00 CSDN第19次竞赛火热进行。 本场竞赛由「电子工业出版社 & CSDN」联合主办。 《Python机器学习算法与实战》 本书基于Python语言,结合实际的数据集,介绍如何使用机器学习与深度学习算法,对数据进行实战分析,在…

MySQL 启动日志报错:Starting MySQL. ERROR! The server quit without updating PID file

一 问题描述 1.1 问题描述 1.首先通过切换到mysql数据库所属用户: hd-mysql [rootlocalhost local]# su hd-mysql 2.启动mysql,报错 [hd-mysqllocalhost data]$ service mysql start Starting MySQL. ERROR! The server quit without updating PID…

50+Vue经典面试题源码级详解,你值得收藏!(一天更新一题,持续更新!!!)

Vue经典面试题源码级详解1、Vue组件之间通信方式有哪些?分析:思路分析:回答范例:1. 组件通信常用方式有以下8种:2、根据组件之间关系讨论组件通信最为清晰有效2、v-if 和 v-for哪个优先级更高分析:思路分析…

学习C语言笔记:数据和C

C Primer Plus (第6版)中文版第3章 学习内容: 1.关键字——int、short、long、unsigned、char、float、double、_Bool、_Complex、_Imaginary; 2.运算符——sizeof(); 3.函数——scanf(); 4.整数类型和浮点数类型的区别; 5.如何书写整型和浮点…

STL简介

目录 什么是STL STL的版本 STL的六大组件 如何学习STL STL的缺陷 结束语 什么是STL STL(standard template libaray-标准模板库):是C标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架 STL的版本…

公司来了个卷王,我愿称之为王中王,让人崩溃

前几天我们公司一下子也来了几个新人,这些年前人是真能熬啊,本来我们几个老油子都是每天稍微加会班就打算走了,这几个新人一直不走,搞得我们也不好走。 2023年春招就要开始了,最近内卷严重,各种跳槽裁员&a…

从TikTok功能优化,抓住直播带货机遇

从今年流出的各类消息总结,TikTok的发展势头愈发迅猛,无论是布局东南亚各个站点,还是在其下载量的激增,都迸发出了前所未有的劲头,其对本身的优化也一直在进行。那么今年,TikTok都进行了哪些功能优化呢&…

p5.js 使用npm安装p5.js后如何使用?

本文简介 点赞 关注 收藏 学会了 在 《p5.js 光速入门》 中都是使用 CDN 的方式去使用 p5.js 的,不太符合当下的开发习惯。 不管是使用 Vue 还是 React,我们日常项目大部分应该都是使用脚手架的方式进行开发了,按照 《p5.js 光速入门》 …

互联网营销的基础方法

推广目的 1.让目标消费群在最短的时间内认知新产品的功能、效果,缩短新产品推广期的时间长度,尽快进入成长期,创造效益。 2.使目标消费群产生试用的欲 望,并逐步将其培育成品牌忠诚者。 3.提高品牌知名度和美誉度。 4.提高现场售点的产品的销量。 5.巩固通路经销商的客…

ARM64内存虚拟化分析(1)基础知识

1 两级转换 1.1 什么是stage2转换 Stage2转换允许hypervisor控制虚拟机VM中内存视图。它允许hypervisor控制一个虚拟机可以访问哪块内存映射的系统资源,以及这些资源应该出现在虚拟机地址空间的哪个位置。 这种控制内存访问的能力对于隔离是非常重要的。Stage2转换…

【C语言 全局 整形变量 布尔变量 数组变量 指针变量 结构体位域变量 枚举变量被其他.C文件相互访问】

【C语言 全局-> 整形变量 布尔变量 数组变量 指针变量 结构体位域变量 枚举变量被其他.C文件相互访问】【0】UI设计【1】项目概述【2】mainwindow.h头文件解析【3】头文件源码【4】mianwindow.c源文件解析【5】源文件源码【6】main文件解析源码【7】编译-链接-运行结果学完这…

对Java中String类的解释

文章目录一、String 的常用方法1.字符串的构造以及字符串常量池2.String 类中对象的比较3.字符串查找4.转化5.字符串替换6.字符串拆分7.字符串截取二、StringBuilder 和 StringBuffer1.引入两者的原因2.相关修改操作的介绍一、String 的常用方法 首先,在介绍 Strin…

[年终总结] 2023,希望一切都能够好起来

0. 引言 2022年,依旧是一个特殊的年份,从前年开始,我就开始撰写年终总结,感兴趣的大家可以看一看2020年终总结和2021年年终总结。 一年比一年过的快速,我也感觉到一年比一年过的更加珍惜。曾经以为自己尚且年轻&…