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# 等),可模拟用户操作浏览器。

工作原理:

  1. Client(测试代码) 通过 WebDriver 协议发送指令。
  2. Driver(浏览器驱动) 充当服务器,解析指令并控制浏览器执行操作。
  3. 浏览器 执行操作后返回结果。

2. Selenium 主要组件

  1. Selenium IDE(录制回放工具)
  2. Selenium WebDriver(核心 API,控制浏览器)
  3. Selenium Grid(分布式执行测试)

3. 常见 WebDriver 驱动

  • ChromeDriver
  • FirefoxDriver
  • EdgeDriver
  • SafariDriver
  • InternetExplorerDriver

4. Selenium 如何驱动浏览器?

  1. Selenium 代码通过 WebDriver API 发送 HTTP 请求给浏览器驱动。
  2. 浏览器驱动接收指令,调用浏览器原生接口执行操作。
  3. 执行结果通过 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 无法找到元素的可能原因?

  1. 定位方式错误
  2. 页面加载过慢(可用显式等待)
  3. 元素在 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. 如何判断页面上元素是否存在?

  1. try...catch 捕获异常
  2. findElements() 结合 size() 判断

21. 如何通过子元素定位父元素?

  • findElement(By.xpath(".."))
  • //*[@name='hello']/..

22. 如何截取单个元素的截图?

  1. 截取整个页面
  2. 获取元素 locationsize
  3. 裁剪图片

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 操作可以大大提高测试的稳定性和效率。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自创《艺术人生》浅析

艺术是生活的馈赠,艺术是苦痛的呻吟。 笔记模板由python脚本于2025-01-29 00:01:11创建,本篇笔记适合喜欢写诗读诗诵诗的coder翻阅。 【学习的细节是欢悦的历程】 博客的核心价值:在于输出思考与经验,而不仅仅是知识的简单复述。 …

二进制安卓清单 binary AndroidManifest - XCTF apk 逆向-2

XCTF 的 apk 逆向-2 题目 wp,这是一道反编译对抗题。 题目背景 AndroidManifest.xml 在开发时是文本 xml,在编译时会被 aapt 编译打包成为 binary xml。具体的格式可以参考稀土掘金 MindMac 做的类图(2014),下面的博…

AboutDialog组件的功能和用法

文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了AlertDialog Widget相关的内容,本章回中将介绍AboutDialog Widget.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在这里说的AboutDialog是一种弹出式窗口,和上一章回中介绍的Al…

计算机网络 IP 网络层 2 (重置版)

IP的简介: IP 地址是互联网协议地址(Internet Protocol Address)的简称,是分配给连接到互联网的设备的唯一标识符,用于在网络中定位和通信。 IP编制的历史阶段: 1,分类的IP地址: …

关于产品和技术架构的思索

技术架构或者设计应该和产品设计分离,但是又不应该和产品架构独立。 听起来非常的绕并且难以理解。 下面我们用一个例子来解读这两者的关系 产品(族谱图) 如果把人类当作产品,那设计师应该是按照上面设计的(当然是正常的伦理道德)…

第十四讲 JDBC数据库

1. 什么是JDBC JDBC(Java Database Connectivity,Java数据库连接),它是一套用于执行SQL语句的Java API。应用程序可通过这套API连接到关系型数据库,并使用SQL语句来完成对数据库中数据的查询、新增、更新和删除等操作…

蓝牙技术在物联网中的应用有哪些

蓝牙技术凭借低功耗、低成本和易于部署的特性,在物联网领域广泛应用,推动了智能家居、工业、医疗、农业等多领域发展。 智能家居:在智能家居系统里,蓝牙技术连接各类设备,像智能门锁、智能灯泡、智能插座、智能窗帘等。…

Visual Studio Code修改terminal字体

个人博客地址:Visual Studio Code修改terminal字体 | 一张假钞的真实世界 默认打开中断后字体显示如下: 打开设置,搜索配置项terminal.integrated.fontFamily,修改配置为monospace。修改后效果如下:

开发环境搭建-4:WSL 配置 docker 运行环境

在 WSL 环境中构建:WSL2 (2.3.26.0) Oracle Linux 8.7 官方镜像 基本概念说明 容器技术 利用 Linux 系统的 文件系统(UnionFS)、命名空间(namespace)、权限管理(cgroup),虚拟出一…

71-《颠茄》

颠茄 颠茄,别名:野山茄、美女草、别拉多娜草,拉丁文名:Atropa belladonna L.是双子叶植物纲、茄科、颠茄属多年生草本,或因栽培为一年生,根粗壮,圆柱形。茎下部单一,带紫色&#xff…

2025 = 1^3 + 2^3 + 3^3 + 4^3 + 5^3 + 6^3 + 7^3 + 8^3 + 9^3

【算法代码】 #include <bits/stdc.h> using namespace std;int year2025; int main() {cout<<year<<" ";int i1;while(year) {cout<<i<<"^3";if(i<9) cout<<" ";year-pow(i,3);i;}return 0; }/* 202…

三天急速通关JavaWeb基础知识:Day 1 后端基础知识

三天急速通关JavaWeb基础知识&#xff1a;Day 1 后端基础知识 0 文章说明1 Http1.1 介绍1.2 通信过程1.3 报文 Message1.3.1 请求报文 Request Message1.3.2 响应报文 Response Message 2 XML2.1 介绍2.2 利用Java解析XML 3 Tomcat3.1 介绍3.2 Tomcat的安装与配置3.3 Tomcat的项…

Baklib揭示内容中台与人工智能技术的创新协同效应

内容概要 在当今信息爆炸的时代&#xff0c;内容的高效生产与分发已成为各行业竞争的关键。内容中台与人工智能技术的结合&#xff0c;为企业提供了一种新颖的解决方案&#xff0c;使得内容创造的流程更加智能化和高效化。 内容中台作为信息流动的核心&#xff0c;能够集中管…

Git进阶之旅:Git 配置信息 Config

Git 配置级别&#xff1a; 仓库级别&#xff1a;local [ 优先级最高 ]用户级别&#xff1a;global [ 优先级次之 ]系统级别&#xff1a;system [ 优先级最低 ] 配置文件位置&#xff1a; git 仓库级别对应的配置文件是当前仓库下的 .git/configgit 用户级别对应的配置文件时用…

Java中的泛型

泛型&#xff1a;是DK5中引入的特性&#xff0c;可以在编译阶段约束操作的数据类型&#xff0c;并进行检查。 泛型的格式&#xff1a;<数据类型> 注意&#xff1a;泛型只能支持引用数据类型。 没有泛型如何储存数据&#xff1a; 弊端&#xff1a;多态不能访问子类的特…

C++/stack_queue

目录 1.stack 1.1stack的介绍 1.2stack的使用 练习题&#xff1a; 1.3stack的模拟实现 2.queue的介绍和使用 2.1queue的介绍 2.2queue的使用 2.3queue的模拟实现 3.priority_queue的介绍和使用 3.1priority_queue的介绍 3.2priority_queue的使用 欢迎 1.stack 1.1stack…

mysql.sock.lock 导致mysql重启失败

背景 今天公司物业断电&#xff0c;导致机房服务器停电宕机&#xff0c;所有的服务都得重启。本着mysql实例都做了服务自启动&#xff0c;所以没有太担心影响开发的日常工作。但是今天一上班开发就找来&#xff0c;各种服务都没起来有问题&#xff0c;数据库连不上。马上登陆数…

Hive:Hive Shell技巧

在终端命令窗口不能直接执行select,creat等HQL命令,需要先进入hive之后才能执行,比较麻烦,但是如果使用Hive Shell就可以直接执行 在终端只执行一次Hive命令 -e 参数, "execute"&#xff08;执行&#xff09;,使用-e参数后会在执行完Hive的命令后退出Hive 使用场景:…

C++:PTA L2-003 月饼

月饼是中国人在中秋佳节时吃的一种传统食品&#xff0c;不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量&#xff0c;请你计算可以获得的最大收益是多少。 注意&#xff1a;销售时允许取出一部分库存。样例给出的情形是这样的&#…

力扣面试150 快乐数 循环链表找环 链表抽象 哈希

Problem: 202. 快乐数 &#x1f469;‍&#x1f3eb; 参考题解 Code public class Solution {public int squareSum(int n) {int sum 0;while(n > 0){int digit n % 10;sum digit * digit;n / 10;}return sum;}public boolean isHappy(int n) {int slow n, fast squa…