Selenium 面试问题
作者 Aaron Cao · 更新于

Selenium 面试聚焦等待、定位器、Page Object Model,以及测试为何会变得不稳定。你需要能讲清隐式与显式等待的区别,说明为什么选 CSS 而不是 XPath 并为这个选择辩护,解决过期元素错误,还要描述你的框架如何并行运行测试。
面试官在等待和定位器上会问什么?
你写的测试在本地能通过,到了流水线里却失败,你怀疑答案和等待有关,却说不清楚。面试官很清楚这一点,所以等待几乎是每场 Selenium 面试的开场话题。这一节讲清楚一个完整的答案应该是什么样子。
- 隐式等待与显式等待。 隐式等待是一个全局设置,每次查找元素时都会轮询等待其出现。显式等待只针对一个元素和一个条件,比如可点击或可见。显式等待更受青睐,因为它明确说明了你在等什么。
- 为什么不应该混用两者? 同时使用两者可能会以难以预测的方式叠加超时时间,所以大多数团队会把隐式等待设为零,全程只用显式等待。
- 什么是 fluent wait? 一种可以配置轮询间隔并忽略特定异常类型的显式等待。
- 为什么
Thread.sleep是错误的? 它是无条件的。它会拖慢一个本该通过的测试,却仍然救不了一个本就很慢的测试。 - 该用 CSS 选择器还是 XPath? 优先使用稳定的测试专用标识属性,其次是可读性更好的 CSS。只有当你需要向上遍历到父节点或按文本匹配时,XPath 才有用武之地。
- 什么会让定位器变得脆弱? 自动生成的类名、绝对路径的 XPath,以及基于索引的选择。说出你会请开发者额外添加什么来替代这些。
面试官在听的是每个选择背后的理由。只说出偏好而不说明代价,听起来就像是背出来的答案。
异常和测试不稳定相关的问题该怎么回答?
测试不稳定才是大多数高级自动化面试真正在考察的主题,因为一个没人信任的测试套件比没有测试套件还糟糕。
- 什么会导致
StaleElementReferenceException? 元素引用指向的节点已经不再挂载在页面上,通常是因为框架重新渲染了页面的那一部分。应该重新查找元素,而不是复用已保存的引用。 ElementNotInteractableException又是怎么回事? 元素存在,但无法被操作:被隐藏、被禁用、被遮挡,或者在屏幕之外。- 如何处理
NoSuchElementException? 要区分是时机问题还是元素确实不存在,不要靠延长等待时间来掩盖问题。 - 为什么测试只在流水线里失败? 视口大小不同、环境更慢、缺少测试数据、动画完成得更晚,以及并行测试互相争抢共享状态。
- 如何修复一个不稳定的测试? 先诊断出问题类别,再修复根本原因。自动重试只是掩盖失败,应该被当作万不得已的手段来对待。
- 如何处理 frame、新窗口和弹窗? 明确地切换上下文,之后再切换回来。
一位应聘中级自动化岗位的 QA 工程师曾被问到:为什么某个测试套件在代码没有任何改动的情况下,每周都会失败两次。真正打动面试官的答案不是某个 Selenium API 细节,而是这些测试共用了同一个预置账号,彼此互相竞争。面试官看重的正是这种诊断顺序:先看环境和数据,再看 API。
更多按岗位和工具划分的题库见 按岗位划分的面试问题。
框架和架构方面会问到哪些问题?
除了 API 本身,面试官还想知道你是否能独立负责一个测试套件。这些问题对高级岗位的分量最重。
- 解释一下 Page Object Model。 Page 类负责暴露操作方法并隐藏定位器,这样界面变化时只需要改一个文件。要说清楚它解决了什么问题;只描述文件夹结构是抓不住重点的。
- Page Object 会出什么问题? 它们会膨胀成上千行的类,并开始在页面方法内部做断言。断言应该放在测试里。
- 你的框架如何并行运行测试? 线程安全的驱动管理,保证实例不会被多个线程共用,再加上每个测试独立的测试数据。
- Selenium Grid 是用来做什么的? 把测试分发到不同机器和浏览器版本上运行,架构是一个 hub 加多个 node,或者由云服务商承担同样的角色。
- Selenium 4 有哪些变化? W3C WebDriver 协议成为标准,旧的 JSON wire protocol 被移除,新增了相对定位器,并且开放了 Chrome DevTools Protocol 的访问能力。
- 什么情况下不该用 Selenium? API 级别的检查、可以做单元测试的逻辑,以及浏览器之外的一切。知道这个边界在哪里,本身就是资深的信号。
- 你怎么决定要自动化哪些内容? 稳定、高价值、重复执行的路径。不是所有东西都要自动化,也不该是一个还在重新设计中的界面。
面试前应该怎么练习?
Selenium 的答案往往是那种知道却很难说清楚的类型。等待这个问题尤其如此,一个完整的回答需要两部分:定义加原因,而只读过资料的候选人往往只说出前半部分就说不下去了。
挑出这里面你最不想面对的五个问题,不打开任何编辑器,大声在九十秒内把每个都答一遍。然后请别人追问一句「为什么」,这个追问几乎每次都会出现。对着一个会反问追问的 AI 面试官反复练习这些问题,比重新读一遍清单更接近真实的面试,这也正是 模拟面试 模式存在的原因。
SubcueAI 创始人 Aaron Cao 把练习的重点放在了「能不能说出来」这个差距上,而不是放在提供更多题目上。在真实面试中,桌面应用和浏览器扩展的侧边栏可以在面试官说话的同时展示结构,这对你已经练习过的内容帮助最大。这个产品能做什么、以及它绝不会跨越的边界,都写在 安全性 页面上。