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

这篇具有很好参考价值的文章主要介绍了软件测试面试真题 | Selenium 的工作原理是什么?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

软件测试面试真题 | Selenium 的工作原理是什么?,软件测试面试,软件测试,面试,selenium,职场和发展,软件测试,软件测试工程师,测试工具,自动化测试

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

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

Web自动化测试的意义

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

  • 回归测试

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

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

Selenium 工作原理

软件测试面试真题 | Selenium 的工作原理是什么?,软件测试面试,软件测试,面试,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 webdriver

import logging

logging.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 object

  driver = 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:53116

4. DEBUG:urllib3.connectionpool:http://localhost:53116 "POST /session HTTP/1.1" 200 788

5. 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 Request

7. 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 14

9. 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 的工作原理是什么?,软件测试面试,软件测试,面试,selenium,职场和发展,软件测试,软件测试工程师,测试工具,自动化测试

这些资料,对于从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助……

软件测试面试真题 | Selenium 的工作原理是什么?,软件测试面试,软件测试,面试,selenium,职场和发展,软件测试,软件测试工程师,测试工具,自动化测试文章来源地址https://www.toymoban.com/news/detail-793922.html

到了这里,关于软件测试面试真题 | Selenium 的工作原理是什么?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • “面试造飞机,上岗拧螺丝“?2023软件测试岗面试真题超全面整理(最新版)

    软件测试这个岗位,想要找到一份高薪的工作,离不开繁杂的面试程序,这相信是很多准备应聘软件测试岗的朋友难题, 很多已经在职多年的软件测试工程师对于这个岗位面试都谈虎色变,那么,为什么软件测试岗位的面试这么难呢? 第一,软件测试属于互联网IT行业,可以

    2024年02月11日
    浏览(46)
  • 软件测试面试题(Selenium相关)

    1、什么是Selenium? Selenium 是一个开源的自动化测试框架,主要用于自动化Web应用程序的测试。它支持多种浏览器(如Chrome、Firefox、Safari、Internet Explorer等)和多种编程语言(如Java、C#、Python、Ruby、JavaScript等),使测试人员可以编写测试脚本来模拟用户对Web应用程序的交互,

    2024年03月15日
    浏览(57)
  • 【软件测试】面试题之selenium篇

    2024年01月18日
    浏览(67)
  • 【软件测试】面试题之selenium篇2

    2024年01月10日
    浏览(81)
  • 软件测试工程师面试如何回答测试工作有什么优势和劣势

    软件测试工程师面试的时候,会遇到很多很奇葩的问题,例如今天要讲的这个问题就是很奇葩:测试工作有什么优势和劣势? 我们做软件测试工作的,为了能够把软件中的明显的缺陷找出来,要读几十遍需求文档,跟开发和产品使劲的沟通,有时候还要拿着竞争对手的产品分

    2024年02月02日
    浏览(65)
  • 德玛西亚之力!游戏类软件测试面试真题+参考答案【保存下来慢慢刷】

    这里有爱,有分享,有工程师们的成长日记,点主页“美团程序员”进行关注 近几年,游戏产业进入新的发展阶段,在互联网市场竞争不断白热化的背景下,游戏测试新技术将在不久的将来掀起一轮新的用户产品质量竞赛。促使游戏公司在产品质量领域的探索热情日益高涨。

    2024年02月15日
    浏览(44)
  • 软件测试培训了几个月,找到工作了,面试经验分享给各位

    功能方面:问的最多的就是测试流程,测试计划包含哪些内容,公司人员配置,有bug开发认为不是 bug怎么处理,怎样才算是好的用例,测试用例设计方法(等价类,边界值等概念方法),包含哪些内 容,怎样保证用例覆盖全面,马上要上线了发现bug怎么处理,怎么判断产品

    2024年02月03日
    浏览(110)
  • 【软件测试】- 将 Selenium 和 JMeter 测试脚本集成到 Jenkins 中实现自动化测试和持续集成(CI)及Jenkinsfile 实现 Jenkins Pipeline 原理介绍

    将 Selenium 和 JMeter 测试脚本集成到 Jenkins 中是实现自动化测试和持续集成(CI)的关键步骤。以下是详细的集成过程: 1、准备工作 安装 Jenkins : 确保您已经在服务器上安装了 Jenkins。 可以从 Jenkins 官网 下载并安装。 安装必要的插件 : 在 Jenkins 中安装所需的插件,如 Git 插

    2024年02月04日
    浏览(73)
  • 软件测试工作实施流程(1)——测试计划设计

    本文开始,我们将在研发模型及测试模型的基础上,介绍业内流行的测试工作实施流程,从测试计划开始直到测试活动结束,详细阐述每个阶段的工作内容,目的是为了加强测试工程师理解和执行规范化流程的能力。 学习目标: 了解软件测试工作流程。 掌握每个阶段的工作

    2024年02月01日
    浏览(55)
  • 软件测试工作流程

    流程体系介绍 在以往的项目工作中,我参与过,需求评审、测试计划制定、测试用例编写、测试用例执行、测试脚本编写、测试脚本的执行,进行回归测试、验收测试、编写阶段性测试报告等工作 需求分析,需求评审(RPD、产品原型图) 制定测试计划、评审测试计划、优化

    2024年02月05日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包