搜索微信公众号:TestingStudio 霍格沃兹的干货都很硬核

Selenium 通常被我们用做测试web的自动化测试工具,其实 Selenium 不仅仅是个API,它是一组工具集合,它是由三大组件组成

  • WebDriver: 可以模拟真正的用户去操作浏览器页面,主要是通过控制浏览器厂商提供的 driver 来控制浏览器
  • Selenium IDE: 是安装在浏览器上一个扩展工具,可以将操作浏览器的过程录制下来,可以导出不同的语言,不同的框架格式
  • Selenium Grid: 可以在不同电脑上执行测试用例,实现分布式并发执行测试用例的效果。

Web自动化测试的意义

通常我们所说的 Web 自动化测试,就是使用 Selenium WebDriver 来对浏览器进行自动化控制。可以调用 Selenium API 操作浏览器,解放人力成本(比如,打开一个 baidu.com,然后找到搜索框,输入搜索内容,验证结果等一连串的用户行为),它的意义体现在如下几个方面:

  • 回归测试

  • 可以执行手工测试很难实现或者很耗时的测试工作,比如并发测试、压力测试

  • 能够更好的利用资源,节省时间和人力成本

Selenium 工作原理

如图所示,Selenium 实现自动化测试,主要由三部分在工作:

  • 客户端脚本(Client)

  • 浏览器驱动(Driver)

  • 浏览器(Browser)

  1. 开始执行测试时,测试用例会作为 Client 端,Selenium 启动浏览器,后台会同时启动一个 Selenium 的 Remote Server 绑定到浏览器上,RemoteServer 是用来监听代码端 (Client) 发来的操作请求

  2. 当代码发送一个 http request 请求给 Server,Server 会解析这个请求,然后转发给 webdriver,由 webdriver 来实际驱动浏览器执行操作(webdriver 就是不同的浏览器厂商提供的不同的 driver 驱动)

  3. webdriver 操作完浏览器的执行结果,会返回给 server ,最终结果返回给 client 端

这是一套完整的流程,所以搭建测试环境的时候,一定要先下载【浏览器对应】的 WebDriver。

为什么能够支持多种浏览器?

  • Selenium WebDriver 是典型的 Server-Client 模式,Server 端就是 Remote Server

  • 浏览器的厂商们给我们提供叫做 driver 的中间件, 通过编写脚本,去给这个中间件发送请求(遵循WebDriver Wire 协议 )实现对浏览器的控制

举个例子,比如约定的协议 /session/{session id}/element 是查找元素, /session/{session id}/element/{element id}/click 是点击元素

  • 通过这个中间件可以直接驱动浏览器执行各种操作,比如点击,滑动, 输入,下拉等等。

  • 通过这个中间件,我们可以控制浏览器

我们可以通过写脚本,去给这个中间件(chrome - chromedrive , firefox-geckodriver)发送请求,那这个请求是如何发送的呢?遵循一个特定的协议进行通讯,

举个例子,提前约定好一个协议 ,你发给我的请求遵循一个特定的协议格式 ,比如约定的协议 /session/{sessionid}/find 就是查找元素,/click 就是点击元素,(这个协议就是 Webdriver 协议)

代码演示

可以通过代码看一下具体工作过程

  • 第一步:下载对应的 chromedriver 并配置环境变量

  • 第二步:打印 DEBUG 级别的日志

  • 第三步:创建 driver

  • 第四步:打开浏览器

  • 第五步:driver.quit()退出操作

代码:

# 创建文件 demo.py   ****不要创建以test_开头*****from selenium import webdriverimport logginglogging.basicConfig(level=logging.DEBUG)  # 打印源码中的日志driver = webdriver.Chrome() # 打开浏览器driver.get("https://www.ceshiren.com") # 访问 测试人论坛

结果:

1. DeprecationWarning: executable_path has been deprecated, please pass in a Service objectdriver = webdriver.Chrome(executable_path="D:\\mydriver\\chromedriver.exe") # 打开浏览器2. DEBUG:selenium.webdriver.remote.remote_connection:POST http://localhost:53116/session {"capabilities": {"firstMatch": [{}], "alwaysMatch": {"browserName": "chrome", "pageLoadStrategy": "normal", "goog:chromeOptions": {"extensions": [], "args": []}}}}3. DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): localhost:531164. DEBUG:urllib3.connectionpool:http://localhost:53116 "POST /session HTTP/1.1" 200 7885. DEBUG:selenium.webdriver.remote.remote_connection:Remote response: status=200 | data={"value":{"capabilities":{"acceptInsecureCerts":false,"browserName":"chrome","browserVersion":"106.0.5249.119","chrome":{"chromedriverVersion":"106.0.5249.61 (511755355844955cd3e264779baf0dd38212a4d0-refs/branch-heads/5249@{#569})","userDataDir":"C:\\Users\\xixi\\AppData\\Local\\Temp\\scoped_dir9520_379661371"},"goog:chromeOptions":{"debuggerAddress":"localhost:53119"},"networkConnectionEnabled":false,"pageLoadStrategy":"normal","platformName":"windows","proxy":{},"setWindowRect":true,"strictFileInteractability":false,"timeouts":{"implicit":0,"pageLoad":300000,"script":30000},"unhandledPromptBehavior":"dismiss and notify","webauthn:extension:credBlob":true,"webauthn:extension:largeBlob":true,"webauthn:virtualAuthenticators":true},"sessionId":"fea574de37447a010cc20ab992cb9ce9"}} | headers=HTTPHeaderDict({'Content-Length': '788', 'Content-Type': 'application/json; charset=utf-8', 'cache-control': 'no-cache'})6. DEBUG:selenium.webdriver.remote.remote_connection:Finished Request7. DEBUG:selenium.webdriver.remote.remote_connection:POST http://localhost:53116/session/fea574de37447a010cc20ab992cb9ce9/url {"url": "https://www.ceshiren.com"}8. DEBUG:urllib3.connectionpool:http://localhost:53116 "POST /session/fea574de37447a010cc20ab992cb9ce9/url HTTP/1.1" 200 149. DEBUG:selenium.webdriver.remote.remote_connection:Remote response: status=200 | data={"value":null} | headers=HTTPHeaderDict({'Content-Length': '14', 'Content-Type': 'application/json; charset=utf-8', 'cache-control': 'no-cache'})10. DEBUG:selenium.webdriver.remote.remote_connection:Finished Request

日志解析

  • DEBUG:selenium.webdriver.remote.remote_connection: 开始请求的标识

  • Finished Request 是一次请求结束的标识

  • 首先,第二行发送 POST 请求,带着参数,创建一个http 连接,第五行得到响应状态码为200,并得到响应对象,第六行结束第一次请求

  • 然后,第七行,发送一个post请求,打开网址,第9行,得到响应状态码200,以及响应数据,第10行结束第二次请求

模拟Selenium 底层请求过程

import requests# 请求地址(打开浏览器)driver_url = 'http://127.0.0.1:53119/session'# 打开浏览器的请求参数driver_value = {"capabilities": {"firstMatch": [{}], "alwaysMatch": {"browserName": "chrome", "platformName": "any", "goog:chromeOptions": {"extensions": [], "args": []}}}, "desiredCapabilities": {"browserName": "chrome", "version": "", "platform": "ANY", "goog:chromeOptions": {"extensions": [], "args": []}}}# 发送求清response_session = requests.post(driver_url, json = driver_value)result = response_session.json()sessionId = result['value']['sessionId']print(f"sessionId ===>> {sessionId}")# 访问 [测试人论坛]请求地址url = 'http://127.0.0.1:53119/session/'+sessionId+'/url'# # 访问我的博客的请求参数value = {"url": "https://www.ceshiren.com"}response1 = requests.post(url = url,json = value)print(response1)
  • 首先模拟发送一个 http 请求,请求 session 对象

  • 从结果中解析出 sessionid

  • 再使用这个 sessionid 发送一个请求,打开页面,得到响应结果

  • 其它操作也是一样(参考w3c webdriver协议)

软件测试面试真题 | Selenium 的工作原理是什么?相关推荐

  1. 2022最新出炉的互联网大厂软件测试面试真题(阿里、京东、百度、美团、腾讯.......)

     先前看过小编文章的小伙伴都知道.小编会时不时发一些互联网大厂(阿里.京东.百度.美团.腾讯.......)的面试真题出来.今天小编一一把它整理了出来.结尾有彩蛋 1.性能测试关注的指标是什么 从外部 ...

  2. 这些软件测试面试真题你见过吗?

    软件的生命周期(基础) 计划阶段-〉需求分析-〉设计阶段-〉编码->测试->运行与维护 测试流程有啥(还是基础) 1).测试需求分析阶段:阅读需求,理解需求,主要就是对业务的学习,分析需求 ...

  3. 近期学员遇到的软件测试面试真题

    本期由耳朵鹅小姐姐提供,题目将收录到woqurefan.cn测试面试题库. 问题1: 可以转语言么?之前学的java,转成python 这种.你觉得能胜任么? 回答: 表面先回答可以,稳住面试官,看他 ...

  4. 浦发银行软件测试面试真题(小编面试亲测)

    对于想要面试去银行面试的小伙伴们看过来,今天为大家总结了浦发银行的面试题,其实很多面试题很多公司都差不多.主要看自己如何灵活回答.以下的问题小编盆友之前面试非浦发银行的银行项目也有被问到过,是在一面的 ...

  5. 软件测试面试真题 | 黑盒测试和白盒测试的基本概念是什么?

    在软件测试的面试中,什么是黑盒测试,什么是白盒测试是特别容易被问到的一个问题. 面试官问出这个问题,其实考察的是大家对于软件测试基础理论的掌握程度.下面来梳理一下这个问题的回答思路. 黑盒测试 黑盒测 ...

  6. 2022大厂高频软件测试面试真题(附答案)

    一.接口测试面试题: 1.接口测试是怎么做的,如何分析数据? 接口测试实际跟一般测试不同就是测试用例的设计部分. 获取接口规范. 设计接口测试功能用例(主要从用户角度出发看接口能否实现业务需求,用例设 ...

  7. 软件测试职业规划、简历编写 面试真题分析 工作日常

    一 卡诺模型 基本型需求 期望型需求 兴奋型需求 二 模型分析 1.对于软件测试工程师来说,需要明确划分自己的三种产品需求 2.确定需求之后,测试优先级划分:基本性需求>期望型需求>兴奋型 ...

  8. 人行计算机面试真题,2018中国人民银行招聘面试真题(附答案)

    原标题:2018中国人民银行招聘面试真题(附答案) 2018中国人民银行招聘笔试成绩已出,面试即将开始,同学们应该提早着手准备了,中公金融人(yhzpks)小编为考生整理了银行面试真题,提前了解一下人 ...

  9. python运维工程师面试题_新浪软件测试面试题-Linux运维工程师面试真题

    新浪软件测试面试题-Linux运维工程师面试真题 作为Linux运维工程师,进入大公司是开启职业新起点的关键,今天特别分享了其在新浪面试Linux运维及云计算工程师的题目和经历,希望对广大Linux运 ...

最新文章

  1. 【连载】Scala程序设计:Java虚拟机多核编程实战——简介
  2. SQLHELPER C#
  3. pip 安装 tensorflow_TensorFlow 学习笔记2-1:ubuntu下安装pip3amp;tensorflowamp;opencv
  4. c语言五子棋坐标覆盖,跪求C语言五子棋悔棋部分实现
  5. usaco-sprime-superprime-pass
  6. Android学习之碎片与活动之间的通信
  7. IDEA下SSM项目搭建的基本操作
  8. 编译原理教程_1 引论
  9. Robot Framework (一)自动化测试框架搭建
  10. C#-实现的鼠标钩子
  11. 教育类App原型制作分享-Busuu
  12. 光环《全脑思维下的敏捷产品构建》总结
  13. 最强蜗牛换了手机找不到服务器,最强蜗牛服务器无响应怎么办 最强蜗牛进不去解决方法...
  14. 2019 中国开源年会即将开启
  15. SQL-按照最新时间分组
  16. iOS AFNetWorking
  17. C/C++音频算法: noise suppression算法及技术资料汇总
  18. 微信图片转换成文字的方法
  19. 高端对话:过程改进领域热点话题集锦
  20. ICP波长及分析校正

热门文章

  1. LaTeX常用语法查询(自用)
  2. 小猫咪的面向对象,一个猫类,三个对象,
  3. excel为单元格区域套用表格样式以及取消表格样式
  4. 如何分辨动态公网ip和固定公网ip之间的关系有什么不同?
  5. 极简Python语法(4)
  6. Myth源码解析系列之六- 订单下单流程源码解析(发起者)
  7. 核心交换机安全多业务高性能万兆交换机
  8. 在没学会用MySQL之前,我还是那个担心删库了就只能跑路的懵懂少年
  9. Rust 正式发布八周年纪念日 2023.5.15
  10. 云原生之 Docker Swarm服务编排介绍及使用入门