面试 - web ui 自动化

web自动化

1.有没有做过Web UI自动化,你们web自动化是怎么做的?

【技术选型 + 架构设计 + 分层思想】

前一个项目是有参与过web自动化测试工作的,

框架:Pytest + selenium

UI 自动化:基于POM模型搭建的,分为3层,base表现层、page页面操作层以及testcase测试用例层,

2.自动化测试流程是什么,举个例子

先根据自己

先挑选测试用例

根据自动化测试用例编写脚本

创建export出库订单:

login -> 检查UI的数据和excel里面的数据是否一致

3.你们自动化覆盖率是多少,怎么统计自动化覆盖率

根据目前的模块覆盖率来算的话,

按照已经实现的占总自动化用例来说,百分之50的样子

4.元素定位的方式有哪些,你常用的元素定位方式有哪些?

id

name

classname

tag

Link_text

partial_link_text

xpath

css_selector

常用的主要是:xpath

//input[@id='kw']/parent::span

//input[@id='kw']/following-sibling::i[2]

//span[text()='换一换']

//button[starts-with(text(), 'Buy s')]

//*[@name='wd']

5.定位不到元素,你碰到过哪些,怎么解决

1.去重现这个操作,看是否能正常找到这个元素(一定要完全重复操作)

2.如果可以找到的话,看一下这个元素是否可见(is_disabled)

3.如果可见的话,去看一下这个元素是否有什么特殊的,比如说在另外一个内嵌网页里面

4.如果不在的话

send_keys()的时候报错不可交互:

1.先看这个元素是不是可输入类的元素,input, textarea这种

2.不是的话就尽量定位到input这种元素上

3.如果是的话,就看一下这个元素的属性是不是可交互,js 获取到这个元素然后is_enabled()

6.xpath定位的方法?xpath怎么写

//div[@name = '123']/parent::span

7.如何去定位内嵌页面

driver.switch_to.frame(名字)

8.如何在不同的网页之间切换,如何处理定位问题

switch_to.window(名字)

9.如何去定位滚动条,滚动条怎么处理

9.1 定位日期控件以及js调试方法

9.2 页面弹出框的处理

2.浏览器自带弹出框

10.如何去模拟键盘和鼠标的操作

键盘的话:

from selenium.webdriver.common.keys import Keys

send_keys(Keys.BACKSPACE)

鼠标的话

from selenium.webdriver.common.action_chains import ActionChains

actions = ActionChains(driver)

actions.move_to_element(driver.find_element(By.CSS_SELECTOR, "span#s-usersetting-top"))

actions.perform()

11.元素定位,有时候定位的到,有时候定位不到,可能是什么原因,怎么解决

经常会出现这个问题

1.大部分有可能是这个网络比较慢,导致这个元素加载延迟,可以用显示等待

2.动态id

12.对于不可见的元素,你如何定位,如何处理

可以用js的方法,将这个元素的属性设置为可见

13.你们自动化用例是怎么管理的

test_case包下面,一个模块一个py文件

14.自动化测试用例如何设计

一定是要可复用的,不能说这次执行了下次执行就会失败

覆盖模块的主功能点

export

15.自动化用例在什么环境下运行,如何批量运行

pytest 参数可以指定运行

pycharm一个一个运行

16.有没有独立的搭建过自动化测试框架

有自己尝试过,基于POM的设计模式

pom

UI自动化测试中的设计思想

Page Object Model: 页面对象模型

将页面元素的定位和测试用例代码进行分离

为什么要使用POM

页面元素对于测试用例来说,很多都是公用的

将页面元素的定位写在测试用例当中,会导致测试用例难以维护

POM 模式的封装思路

POM将页面划分三层

表现层: 页面中可见的元素,都属于表现层。(元素定位器的编写)

操作层: 对页面可见元素的操作,比如:输入文本内容,点击,拖拽......

业务层: 对页面当中若干元素操作后所实现的功能

POM的核心要素

在POM模式当中,将一些公共的方法封装到一个BasePage类中,该类是对Selenium的常用操作的二次封装

每个页面对应一个page类,page类需要继承自BasePage

测试用例基于page对象的方法

17.数据驱动怎么做的

没有数据驱动,接口自动化有

18.自动化中如何去操作excel表格

pandas读取excel

19.自动化中如何去操作数据库

pymysql

20.有没有自己封装过一些函数,封装过哪些函数

pymysql函数

log函数

config函数

21. web UI 自动化你怎么做断言

1.断言UI 上显示是否有该提示

2.断言UI显示的数据是否和db显示的一致

21.如何生成自动化测试报告

allure

  • allure : 解压,将bin目录加入环境变量的path当中
  • allure-pytest : pip install allure-pytest

22.对于生成的自动化测试报告如何分析

23.selenium库中用过哪些函数

driver.get()

driver.clear()

driver.find_elemant_by

24.se原理、playwright原理,两者区别,

请具体说一下,在你的实际体验中,Playwright 相比 Selenium 最大的优势是什么?或者是:你在使用 Selenium 时遇到过什么无法解决的痛点,是 Playwright 能轻松搞定的?

25.3种等待的区别和场景应用

显式等待:轮询

隐式等待:

强制等待:time.sleep() #用于调试

26.遇到过哪些难定位的元素,你是如何定位的

27.你的自动化框架是如何设计的

28. web自动化落地过程以及难点剖析

29.如何保证元素定位的成功率

====== 封装 - 考察代码能力 =====

关于 Base 层的封装(考察代码能力) 请问你的 BasePage 类中,除了简单的"查找元素"和"点击"之外,还封装了哪些通用的核心逻辑?

你提到了 Base 层。很多初级测试只是在 Base 层里写个 driver.find_element 就完了。

(提示:比如显式等待怎么处理?异常捕获怎么做?失败截图怎么实现?日志怎么打?)

关于稳定性(Web UI 的核心痛点)除了加 time.sleep(强制等待)这种不推荐的方式外,你在框架层面是如何设计"等待机制"来保证脚本稳定性的?

UI 自动化最怕的就是"不稳",比如元素偶尔加载慢了、页面有动态弹窗干扰等。

====== 业务结合能力 =====

在你的过往项目中,有没有遇到过很难定位的元素 ,或者是非标准的控件(比如滑动验证码、时间选择器、复杂的树状菜单)? 你是怎么解决的?(如果没遇到过,就说一个你觉得最复杂的场景)

===== 用例设计能力 =====

"假设现在的 Web 页面上有一个文件上传的功能。

  1. 如果那个上传按钮是 <input type='file'> 标签,你会怎么做自动化?

  2. 如果那个按钮不是 input 标签(是非标准的上传组件,点开会弹出一个 Windows 的文件选择框),这时候 Selenium/Playwright 控制不了操作系统弹窗,你会怎么处理?"

1.如果type是file的话,

eplus 有文件上传的功能

==== 持续集成 ====

框架的持续集成怎么实现

这个问题问得很好,考察的是你自动化测试落地 的能力,以及你对DevOps流程的理解。

结合你之前的**"AI模型压缩"**模块,回答的核心逻辑应该是:
"工具链 + 流程控制 + 策略分层"

因为模型压缩涉及大量运算,跑一次很慢,所以不能傻傻地每次代码提交都跑全量测试,这里要体现出策略

以下是满分回答模板:


🎙️ 面试回答话术

"我们框架的持续集成(CI)主要是基于 Jenkins + GitLab + Docker 来实现的。

主要是为了解决**'代码提交后的快速回归''夜间全量监控'**。

具体流程我分为 4 个阶段 来讲:"

1. 触发机制(什么时候跑?)

"我们配置了两种触发方式:

  • 代码提交触发(Webhook): 当开发提交代码(Push)或者发起合并请求(MR)时,自动触发 Jenkins 构建。
  • 定时触发(Nightly Build): 每天凌晨 2 点,系统空闲时,自动跑全量回归测试。"
2. 环境构建(在哪里跑?)

"因为模型压缩对环境依赖很重(Python版本、TensorFlow/PyTorch版本),为了避免环境污染,我们使用 Docker 容器化执行

  • Jenkins 收到任务后,会拉取最新的测试代码。
  • 启动一个干净的 Docker 容器(里面预装好了测试框架依赖)。
  • 在容器内执行测试脚本,保证每次测试环境都是一致的。"
3. 执行策略(跑什么?------这里是亮点)

"针对模型压缩比较耗时的特点,我们做了分层测试策略

  • 提交阶段(Smoke Test): 只跑冒烟测试。选几个典型的、体积小的模型(比如 <10MB 的 Demo 模型)跑通压缩流程,确保核心功能没挂,耗时控制在 5-10 分钟内。
  • 夜间阶段(Regression Test):全量回归。覆盖各种框架、各种参数组合、大体积模型。这部分比较慢,放在晚上跑。"
4. 报告与通知(结果给谁看?)

"测试执行完后,会利用 Allure 生成可视化的 HTML 报告,包含成功率、耗时趋势、失败截图等。

  • 通知机制: 我们打通了钉钉/企业微信机器人
    • 如果测试通过,仅在群里发一条简报。
    • 如果测试失败,会直接 @对应的开发人员,并附上 Jenkins 的日志链接,要求尽快修复。"

💡 追问准备(技术细节)

面试官可能会问:"如果CI报错了,怎么排查是环境问题还是代码问题?"

你的回答:

"这正是我们用 Docker 的原因。

如果本地跑得通,CI 跑不通,通常是环境差异。但因为我们 CI 是在 Docker 里跑的,我可以在本地拉取同一个 Docker 镜像 来复现问题。

另外,我会去查看 Jenkins 的 Console Output(控制台日志),看是报错在环境安装阶段,还是测试断言阶段。"


📝 简单总结(记不住就背这个短版)

"我们的 CI 是用 Jenkins 搭建的。

流程是:代码提交到 GitLab 后,自动触发 Jenkins 任务。

任务会在 Docker 容器里运行 Pytest 自动化脚本。

为了效率,白天提交代码只跑冒烟测试 (快速验证),晚上跑全量回归

最后生成 Allure 报告,并通过钉钉群通知大家测试结果。"

框架的数据是怎么分层的

相关推荐
EndingCoder8 小时前
接口基础:定义对象形状
linux·运维·前端·javascript·typescript
Larry_Yanan9 小时前
Qt安卓开发(一)Qt6.10环境配置
android·开发语言·c++·qt·学习·ui
且去填词9 小时前
DeepSeek :基于 AST 与 AI 的遗留系统“手术刀”式治理方案
人工智能·自动化·llm·ast·agent·策略模式·deepseek
小雨下雨的雨9 小时前
Flutter 框架跨平台鸿蒙开发 —— Padding 控件之空间呼吸艺术
flutter·ui·华为·harmonyos·鸿蒙系统
passerma9 小时前
解决qiankun框架子应用打包后css里的图片加载404失败问题
前端·微前端·qiankun
云动课堂9 小时前
【运维实战】企业级Samba文件共享服务 · 一键自动化部署方案 (适配银河麒麟 V10 /openEuler /CentOS)
运维·centos·自动化
Aliex_git9 小时前
性能优化 - Vue 日常实践优化
前端·javascript·vue.js·笔记·学习·性能优化
cly19 小时前
SaltStack自动化(一): 原理与安装
运维·自动化·saltstack
董世昌419 小时前
添加、删除、替换、插入元素的全方法指南
java·开发语言·前端