selenium自动化测试框架——面试题整理
目录
1. 什么是 Selenium?它的工作原理是什么?
2. Selenium 主要组件
3. 常见 WebDriver 驱动
4. Selenium 如何驱动浏览器?
5. WebDriver 协议是什么?
6. Page Object 模式与 Page Factory
7. 如何判断元素是否可见?
8. 如何判断元素是否存在?
9. Hidden 或 display=none 的元素能否被 Selenium 定位?
10. Selenium 无法找到元素的可能原因?
11. 如何提高元素交互成功率?
12. 如何定位动态元素?
13. 如何处理动态加载的元素?
14. Selenium 何时使用 JavaScript?
15. 如何处理 Web 弹窗?
16. Selenium 是否支持桌面应用测试?
17. 如何在 WebDriver 中打开网页?
18. Selenium 常见异常
19. 为什么不推荐 XPath?
20. 如何判断页面上元素是否存在?
21. 如何通过子元素定位父元素?
22. 如何截取单个元素的截图?
23. 元素 click() 无效怎么办?
24. 如何提高 Selenium 执行速度?
25. 如何提高 Selenium 稳定性?
26. 如何判断复选框/单选框是否被选中?
27. 如何上传文件?
28. 如何截取屏幕截图?
29. Assert 与 Verify 的区别?
30. Selenium WebDriver 的优点
31. 什么是 Selenium Grid?
1. 什么是 Selenium?它的工作原理是什么?
Selenium 是一个开源的 Web 自动化测试框架,支持多种编程语言(如 Java、Python、C# 等),可模拟用户操作浏览器。
工作原理:
- Client(测试代码) 通过 WebDriver 协议发送指令。
- Driver(浏览器驱动) 充当服务器,解析指令并控制浏览器执行操作。
- 浏览器 执行操作后返回结果。
2. Selenium 主要组件
- Selenium IDE(录制回放工具)
- Selenium WebDriver(核心 API,控制浏览器)
- Selenium Grid(分布式执行测试)
3. 常见 WebDriver 驱动
- ChromeDriver
- FirefoxDriver
- EdgeDriver
- SafariDriver
- InternetExplorerDriver
4. Selenium 如何驱动浏览器?
- Selenium 代码通过 WebDriver API 发送 HTTP 请求给浏览器驱动。
- 浏览器驱动接收指令,调用浏览器原生接口执行操作。
- 执行结果通过 HTTP 响应返回给 Selenium 代码。
5. WebDriver 协议是什么?
WebDriver 使用 W3C WebDriver 协议,基于 HTTP 和 JSON 格式,允许远程控制浏览器。
6. Page Object 模式与 Page Factory
- Page Object:使用类封装页面元素和操作,提高代码可读性和维护性。
- Page Factory:Selenium 提供的工具,简化 Page Object 实现。
7. 如何判断元素是否可见?
boolean visible = driver.findElement(By.id("XXX")).isDisplayed();
boolean selected = driver.findElement(By.id("XXX")).isSelected();
boolean enabled = driver.findElement(By.id("XXX")).isEnabled();
8. 如何判断元素是否存在?
使用 findElements() 结合 size() 判断:
if(driver.findElements(By.id("XXX")).size() > 0) {// 元素存在
}
9. Hidden 或 display=none 的元素能否被 Selenium 定位?
不能,Selenium 不能直接操作不可见元素。
10. Selenium 无法找到元素的可能原因?
- 定位方式错误
- 页面加载过慢(可用显式等待)
- 元素在 iframe 中(需
switchTo().frame())
11. 如何提高元素交互成功率?
- 使用显式等待 (
WebDriverWait) - 确保元素可见
- 处理滚动问题
12. 如何定位动态元素?
- 使用 XPath 轴(
parent,following-sibling) - 使用 findElements() 遍历
13. 如何处理动态加载的元素?
- 触发加载后再
findElement() - 使用 显式等待
14. Selenium 何时使用 JavaScript?
- 操作不可见元素
- 滚动页面
((JavascriptExecutor) driver).executeScript("window.scrollTo(0, document.body.scrollHeight)");
15. 如何处理 Web 弹窗?
Alert alert = driver.switchTo().alert();
alert.accept();
alert.dismiss();
16. Selenium 是否支持桌面应用测试?
不支持,Selenium 仅限 Web 应用。
17. 如何在 WebDriver 中打开网页?
driver.get("https://example.com");
driver.navigate().to("https://example.com");
18. Selenium 常见异常
NoSuchElementException(找不到元素)TimeoutException(超时)ElementNotInteractableException(元素不可交互)NoSuchWindowException(窗口不存在)
19. 为什么不推荐 XPath?
- XPath 解析较慢
- 绝对路径容易变化
- CSS 选择器更高效
20. 如何判断页面上元素是否存在?
try...catch捕获异常findElements()结合size()判断
21. 如何通过子元素定位父元素?
findElement(By.xpath(".."))//*[@name='hello']/..
22. 如何截取单个元素的截图?
- 截取整个页面
- 获取元素
location和size - 裁剪图片
23. 元素 click() 无效怎么办?
使用 JavaScript 点击:
((JavascriptExecutor) driver).executeScript("arguments[0].click();", element);
24. 如何提高 Selenium 执行速度?
- 使用 Java 代替 Python(执行效率更高)
- 避免
Thread.sleep(),使用显式等待 - 使用 Selenium Grid 并行测试
25. 如何提高 Selenium 稳定性?
- 稳定的定位方式(优先使用 ID)
- 显式等待
- 封装常见操作
26. 如何判断复选框/单选框是否被选中?
driver.findElement(By.xpath("元素路径")).isSelected();
27. 如何上传文件?
driver.findElement(By.id("fileUpload")).sendKeys("C:\\path\\to\\file.txt");
28. 如何截取屏幕截图?
File srcFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(srcFile, new File("screenshot.png"));
29. Assert 与 Verify 的区别?
Assert失败后测试终止Verify失败后继续执行
30. Selenium WebDriver 的优点
- 跨浏览器兼容性
- 支持多语言
- 可集成 CI/CD
31. 什么是 Selenium Grid?
Selenium Grid 允许分布式执行测试,在不同机器和浏览器上并行运行测试。
总结: Selenium 主要用于 Web 自动化测试,熟悉 WebDriver API、定位方式、等待机制、异常处理及 JavaScript 操作可以大大提高测试的稳定性和效率。
相关文章:
selenium自动化测试框架——面试题整理
目录 1. 什么是 Selenium?它的工作原理是什么? 2. Selenium 主要组件 3. 常见 WebDriver 驱动 4. Selenium 如何驱动浏览器? 5. WebDriver 协议是什么? 6. Page Object 模式与 Page Factory 7. 如何判断元素是否可见&#x…...
第19篇:python高级编程进阶:使用Flask进行Web开发
第19篇:python高级编程进阶:使用Flask进行Web开发 内容简介 在第18篇文章中,我们介绍了Web开发的基础知识,并使用Flask框架构建了一个简单的Web应用。本篇文章将深入探讨Flask的高级功能,涵盖模板引擎(Ji…...
深度学习框架应用开发:基于 TensorFlow 的函数求导分析
深度学习框架应用开发:基于 TensorFlow 的函数求导分析 在深度学习的世界里,梯度计算是优化算法的核心。而 TensorFlow 作为一款强大的深度学习框架,为我们提供了简洁而强大的工具来进行自动求导操作,这极大地简化了深度学习模型的…...
【学术会议征稿-第二届生成式人工智能与信息安全学术会议(GAIIS 2025)】人工智能与信息安全的魅力
重要信息 时间:2025年2月21日-23日 地点:中国杭州 官网:http://www.ic-gaiis.org 简介 2025年第二届生成式人工智能与信息安全将于 2025年2月21日-23日在中国杭州举行。主要围绕“生成式人工智能与信息安全”的最新研究展开,…...
2025春晚刘谦魔术揭秘魔术过程
2025春晚刘谦魔术揭秘魔术过程 首先来看全过程 将杯子,筷子,勺子以任意顺序摆成一排 1.筷子和左边物体交换位置 2.杯子和右边物体交换位置 3.勺子和左边物体交换位置 最终魔术的结果是右手出现了杯子 这个就是一个简单的分类讨论的问题。 今年的魔术…...
postgresql的用户、数据库和表
在 PostgreSQL 中,用户、数据库和表是关系型数据库系统的基本组成部分。理解这些概念对数据库管理和操作至关重要。下面是对这些概念的详细解释: 1. 用户(User) 在 PostgreSQL 中,用户(也称为 角色&#…...
上海亚商投顾:沪指冲高回落 大金融板块全天强势 上海亚商投
上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 市场全天冲高回落,深成指、创业板指午后翻绿。大金融板块全天强势,天茂集团…...
06-机器学习-数据预处理
数据清洗 数据清洗是数据预处理的核心步骤,旨在修正或移除数据集中的错误、不完整、重复或不一致的部分,为后续分析和建模提供可靠基础。以下是数据清洗的详细流程、方法和实战示例: 一、数据清洗的核心任务 问题类型表现示例影响缺失值数值…...
01学习预热篇(D6_正式踏入JVM深入学习前的铺垫)
目录 学习前言 一、虚拟机的结构 1. Java虚拟机参数设置 2. java 堆 3. 出入栈 4. 局部变量表 1> 局部变量的剖析 2> 局部变量的回收 5. 操作数栈 1> 常量入栈指令 2> 局部变量值转载到栈中指令 3> 将栈顶值保存到局部变量中指令 6. 帧数据区 7. 栈…...
【漫话机器学习系列】068.网格搜索(GridSearch)
网格搜索(Grid Search) 网格搜索(Grid Search)是一种用于优化机器学习模型超参数的技术。它通过系统地遍历给定的参数组合,找出使模型性能达到最优的参数配置。 网格搜索的核心思想 定义参数网格 创建一个包含超参数值…...
https数字签名手动验签
以bing.com 为例 1. CA 层级的基本概念 CA 层级是一种树状结构,由多个层级的 CA 组成。每个 CA 负责为其下一层级的实体(如子 CA 或终端实体)颁发证书。层级结构的顶端是 根 CA(Root CA),它是整个 PKI 体…...
【股票数据API接口36】如何获取股票当天逐笔大单交易数据之Python、Java等多种主流语言实例代码演示通过股票数据接口获取数据
如今,量化分析在股市领域风靡一时,其核心要素在于数据,获取股票数据,是踏上量化分析之路的第一步。你可以选择亲手编写爬虫来抓取,但更便捷的方式,莫过于利用专业的股票数据API接口。自编爬虫虽零成本&a…...
RocketMQ 中如何实现消息的可靠传递?
引言 作为头部消息队列开源中间件,学习其中的技术方案并且总结可靠性和健壮性,提升我们的架构思维和解决问题的能力 。 在 RocketMQ 中实现消息的可靠传递可以从多个方面入手,涵盖生产者、Broker 以及消费者等不同环节。 生产者端 1. 同步…...
Elasticsearch+kibana安装(简单易上手)
下载ES( Download Elasticsearch | Elastic ) 将ES安装包解压缩 解压后目录如下: 修改ES服务端口(可以不修改) 启动ES 记住这些内容 验证ES是否启动成功 下载kibana( Download Kibana Free | Get Started Now | Elastic ) 解压后的kibana目…...
视频多模态模型——视频版ViT
大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细解读多模态论文《ViViT: A Video Vision Transformer》,2021由google 提出用于视频处理的视觉 Transformer 模型,在视频多模态领域有…...
单机伪分布Hadoop详细配置
目录 1. 引言2. 配置单机Hadoop2.1 下载并解压JDK1.8、Hadoop3.3.62.2 配置环境变量2.3 验证JDK、Hadoop配置 3. 伪分布Hadoop3.1 配置ssh免密码登录3.2 配置伪分布Hadoop3.2.1 修改hadoop-env.sh3.2.2 修改core-site.xml3.2.3 修改hdfs-site.xml3.2.4 修改yarn-site.xml3.2.5 …...
Ollama windows安装
Ollama 是一个开源项目,专注于帮助用户本地化运行大型语言模型(LLMs)。它提供了一个简单易用的框架,让开发者和个人用户能够在自己的设备上部署和运行 LLMs,而无需依赖云服务或外部 API。这对于需要数据隐私、离线使用…...
鸿蒙next 自定义日历组件
效果图预览 20250124-113957 使用说明 1.选择日期左右箭头,实现每月日历切换,示例中超出当前月份,禁止进入下一月,可在代码更改 2.日历中显示当前选择的日期,选中的日期颜色可自定义 3.日历中可展示历史记录作为数据…...
Nginx 开发总结
文章目录 1. Nginx 基础概念1-1、什么是 Nginx1-2、Nginx 的工作原理1-3、Nginx 的核心特点1-4、Nginx 的常见应用场景1-5、Nginx 与 Apache 的区别1-6、 Nginx 配置的基本结构1-7、Nginx 常见指令 2. Nginx 配置基础2-1、Nginx 配置文件结构2-2、全局配置 (Global Block)2-3、…...
Van-Nav:新年,将自己学习的项目地址统一整理搭建自己的私人导航站,供自己后续查阅使用,做技术的同学应该都有一个自己网站的梦想
嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 Van-Nav是一个基于Vue.js开发的导航组件库,它提供了多种预设的样式和灵活的配置选项,使得开发者可以轻松地定制出符合项目需求…...
层次聚类构建层次结构的簇
层次聚类(Hierarchical Clustering)可以通过自定义函数来完成。层次聚类可以分为两种方法:凝聚型(Agglomerative)和分裂型(Divisive)。这里主要介绍一种常用的凝聚型方法,它是自底向…...
计算机网络__基础知识问答
Question: 1)在计算机网络的5层结构中,每一层的功能大概是什么? 2)交换机的功能?https://www.bilibili.com/video/BV1na4y1L7Ev 3)路由器的功能?https://www.bilibili.com/video/BV1hv411k7n…...
网易云音乐歌名可视化:词云生成与GitHub-Pages部署实践
引言 本文将基于前一篇爬取的网易云音乐数据, 利用Python的wordcloud、matplotlib等库, 对歌名数据进行深入的词云可视化分析. 我们将探索不同random_state对词云布局的影响, 并详细介绍如何将生成的词云图部署到GitHub Pages, 实现数据可视化的在线展示. 介绍了如何从原始数据…...
PHP根据IP地址获取地理位置城市和经纬度信息
/** 根据IP地址 获取地理位置*/ function getLocationByIP($ip) {$url "http://ip-api.com/json/{$ip}?langzh-CN&fieldsstatus,message,country,countryCode,region,regionName,city,lat,lon,timezone,isp,org,as";$response file_get_contents($url);$data …...
渲染流程概述
渲染流程包括 CPU应用程序端渲染逻辑 和 GPU渲染管线 一、CPU应用程序端渲染逻辑 剔除操作对物体进行渲染排序打包数据调用Shader SetPassCall 和 Drawcall 1.剔除操作 视椎体剔除 (给物体一个包围盒,利用包围盒和摄像机的视椎体进行碰撞检测…...
【单细胞-第三节 多样本数据分析】
文件在单细胞\5_GC_py\1_single_cell\1.GSE183904.Rmd GSE183904 数据原文 1.获取临床信息 筛选样本可以参考临床信息 rm(list ls()) library(tinyarray) a geo_download("GSE183904")$pd head(a) table(a$Characteristics_ch1) #统计各样本有多少2.批量读取 学…...
libOnvif通过组播不能发现相机
使用libOnvif库OnvifDiscoveryClient类, auto discovery new OnvifDiscoveryClient(QUrl(“soap.udp://239.255.255.250:3702”), cb.Build()); 会有错误: end of file or no input: message transfer interrupted or timed out(30 sec max recv delay)…...
项目集成GateWay
文章目录 1.环境搭建1.创建sunrays-common-cloud-gateway-starter模块2.目录结构3.自动配置1.GateWayAutoConfiguration.java2.spring.factories 3.pom.xml4.注意:GateWay不能跟Web一起引入! 1.环境搭建 1.创建sunrays-common-cloud-gateway-starter模块…...
2025年01月28日Github流行趋势
项目名称:maybe 项目地址url:https://github.com/maybe-finance/maybe项目语言:Ruby历史star数:37540今日star数:1004项目维护者:zachgoll, apps/dependabot, tmyracle, Shpigford, crnsh项目简介ÿ…...
使用Ollama本地部署DeepSeek R1
前言 DeepSeek是一款开源的智能搜索引擎,能够通过深度学习技术提高搜索的智能化水平。如果你正在寻找一种方式来将DeepSeek部署在本地环境中,Ollama是一个非常方便的工具,它允许你在本地快速部署并管理各种基于AI的模型。 在本篇博客中&…...
