测试自动化面试都考些啥
最近朋友小李去面试自动化测试岗位,信心满满结果被几个问题问懵了。回来跟我吐槽:‘我以为会写个脚本就行,谁知道人家问得特别细,连页面元素定位失败怎么处理都让现场说思路。’ 其实像他这样的情况挺普遍,很多人觉得会用 Selenium 或者 Pytest 就算入门了,但企业招人更看重的是实际问题的应对能力。
高频问题一:元素定位不到怎么办
这个问题几乎是必问项。比如你写的自动化脚本昨天还能跑通,今天突然报错找不到登录按钮。可能原因有很多:页面加载慢、iframe 嵌套、动态 class 名、前端框架异步渲染等等。
回答时别只说‘我用显式等待’,得具体点。比如说可以结合 WebDriverWait 等待元素可点击,或者切换 iframe 上下文。实际场景中,很多弹窗都是嵌在 iframe 里的,不切进去根本定位不到元素。
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 等待元素出现并点击
wait = WebDriverWait(driver, 10)
login_btn = wait.until(EC.element_to_be_clickable((By.ID, "login-btn")))
login_btn.click()
高频问题二:如何设计可维护的自动化测试框架
面试官一听你说“我用 Page Object 模式”,眼神立马亮了。这确实是加分项。把页面元素和操作封装成类,测试用例只关心业务流程,改 UI 的时候只需要动页面类,不用改所有脚本。
举个例子,登录页变了验证码位置,原来写法可能是到处找验证码输入框,现在只要改 LoginPage 类里的一个属性就行。
class LoginPage:
def __init__(self, driver):
self.driver = driver
self.username_input = (By.ID, "user")
self.password_input = (By.ID, "pass")
self.login_button = (By.ID, "submit")
def login(self, username, password):
self.driver.find_element(*self.username_input).send_keys(username)
self.driver.find_element(*self.password_input).send_keys(password)
self.driver.find_element(*self.login_button).click()
高频问题三:遇到验证码怎么处理
这是个现实难题。有人直接说“让开发关掉验证码”,听起来省事,但在正式环境根本不成立。靠谱的做法有几种:开发配个固定验证码、走接口预置 token、或者用图像识别(成本高)。
更接地气的办法是,在测试环境加个开关,比如 URL 带上 ?debug=1 就自动填充验证码。这样既不影响自动化执行,也不破坏流程完整性。
高频问题四:持续集成中怎么运行自动化测试
很多公司用 Jenkins 或 GitLab CI 跑自动化任务。面试官想知道你是不是真上过手。别说“我知道 Jenkins 可以定时跑任务”,要说清楚流程:代码提交触发构建 → 安装依赖 → 启动浏览器(常配合无头模式)→ 执行测试 → 输出报告。
如果还能提到 allure 报告或者失败截图自动归档,基本就稳了。
其他常见问题速览
- 如何处理弹窗和警告框?—— switch_to.alert 接口调用
- 多浏览器怎么兼容?—— 配置驱动工厂返回不同 driver 实例
- 测试数据怎么管理?—— 外部 JSON/YAML 文件或数据库准备
- 接口自动化怎么做?—— requests + pytest 断言状态码和响应体
其实面试不怕问题多,怕的是只会背答案。真正做过项目的人,聊起来细节自然就出来了。比如你说用了重试机制,面试官一追问‘重试三次间隔多久’,如果你答不上来,那可信度就打折了。
建议准备面试时,把自己跑过的项目捋一遍,每个环节都想想有没有坑,怎么填的。比刷十道题都管用。