赏金任务每周更新,请持续关注哦
活动时间
- 2023年1月9日 - 2023年1月13日24:00
活动奖品
- 100元京东购物卡
本周任务
-
任务: 面试题问答
-
题目: Selenium 的工作原理是什么?
-
参与方式:本帖下方回复你的答案即可
本问题参与赏金活动,详情点击 🌈 赏金活动上线啦 丨做赏金任务挑战千元奖金 查看活动介绍
赏金任务每周更新,请持续关注哦
任务: 面试题问答
题目: Selenium 的工作原理是什么?
参与方式:本帖下方回复你的答案即可
本问题参与赏金活动,详情点击 🌈 赏金活动上线啦 丨做赏金任务挑战千元奖金 查看活动介绍
Selenium将浏览器原生的API封装成WebDriver API,可以直接操作浏览器页面里的元素,甚至操作浏览器本身(截屏,窗口大小,启动,关闭,安装插件,配置证书之类的),所以就像真正的用户在操作一样。
webdriver是按照server–client的经典设计模式设计的:
server端就是remote server,可以是任意的浏览器:我们的脚本启动浏览器后,该浏览器就是remote server,它的职责就是等待client发送请求并做出相应;
client端简单说来就是我们的测试代码中的一些行为,比如打开浏览器,转跳到特定的url等操作是以http请求的方式发送给被server端(也就是被测浏览器)server接受请求,并执行相应操作,并在response中返回执行状态、返回值等信息;
Sever端需要依赖原生的浏览器组件,转化Web Service的命令为浏览器native的调用来完成操作。
我们使用Selenium实现自动化测试,主要需要3个东西
1.测试脚本,可以是python,java编写的脚本程序(也可以叫做client端)
2.浏览器驱动, 这个驱动是根据不同的浏览器开发的,不同的浏览器使用不同的webdriver驱动程序且需要对应相应的浏览器版本,比如:geckodriver.exe(chrome)
我们可以把WebDriver驱动浏览器类比成出租车司机开出租车。
在开出租车时有三个角色:
**乘客:**他/她告诉出租车司机去哪里,大概怎么走
**出租车司机:**他按照乘客的要求来操控出租车
**出租车:**出租车按照司机的操控完成真正的行驶,把乘客送到目的地
3.浏览器,目前selenium支持市面上大多数浏览器,如:火狐,谷歌,IE等
先看一个简单的代码
from selenium import webdriver dr = webdriver.Chrome() # 打开浏览器
执行上述代码,我们会发现程序打开了Chrome浏览器
前提:你已经正确配置了chrome的驱动和对应版本, 下载的浏览器驱动放到python的根目录下,便于程序在执行驱动的时候查找(因为你安装python软件时配置过环境变量
那么selenium是如何实现这个过程的呢?通过下图理解selenium的工作原理
用Selenium实现自动化,主要需要三个东西:
1.自动化测试代码:自动化测试代码发送请求给浏览器的驱动(比如火狐驱动、谷歌驱动,IE驱动)
2.浏览器驱动:它来解析这些自动化测试的代码,解析后把它们发送给浏览器
3.浏览器:执行浏览器驱动发来的指令,并最终完成工程师想要的操作。
测试代码中包含了各种期望的对浏览器界面的操作,例如点击。测试代码通过给Webdriver发送指令,让Webdriver知道想要做的操作,而Webdriver根据这些操作在浏览器界面上进行控制,由此测试代码达到了在浏览器界面上操作的目的。
Selenium脚本执行时后端实现的流程:
1.对于每一条Selenium脚本,一个http请求会被创建并且发送给浏览器的驱动
2.浏览器驱动中包含了一个HTTP Server,用来接收这些http请求
3.HTTP Server接收到请求后根据请求来具体操控对应的浏览器
4.浏览器执行具体的测试步骤
5.浏览器将步骤执行结果返回给HTTP Server
6.HTTP Server又将结果返回给Selenium的脚本,如果是错误的http代码我们就会在控制台看到对应的报错信息。
WebDriver基于的协议:JSON Wire protocol
JSON Wire protocol是在http协议基础上,对http请求及响应的body部分的数据的进一步规范。body部分主要传送具体的数据,在WebDriver中这些数据都是以JSON的形式存在并进行传送的,这就是JSON Wire protocol。所以在Client和Server之间,只要是基于JSON Wire Protocol来传递数据,就与具体的脚本语言无关了,这样同一个浏览器的驱动就即可以处理Java语言的脚本,也可以处理Python语言的脚本了。
Selenium工作的过程中有三个角色,
其一便是跟我们最近的自动化测试代码:自动化测试代码发送请求给浏览器的驱动;
其二便是浏览器的驱动:每个浏览器都有自己的驱动,均以exe文件形式存在,比如谷歌的chromedriver.exe、火狐的geckodriver.exe、IE的IEDriverServer.exe,它来解析这些自动化测试的代码,解析后把它们发送给浏览器;
其三便是浏览器:执行浏览器驱动发来的指令,并最终完成工程师想要的操作。