软件测试-UI自动化-面试题1 请简述 Web UI 自动化的工作原理。Web UI 自动化主要是通过 Selenium 等工具利用 WebDriver 控制浏览器定位页面元素并模拟用户操作最后获取页面结果通过断言(assert)判断功能是否符合预期。Web 自动化测试中常用的元素定位方法有哪些id 定位通过元素的 id 属性定位通常比较稳定。name 定位通过元素的 name 属性定位。class name 定位通过元素的 class 属性定位。tag name 定位通过标签名称定位例如input、button。link text 定位通过超链接的完整文本定位。partial link text 定位通过超链接的部分文本定位。CSS Selector 定位通过 CSS 选择器定位灵活且效率较高。XPath 定位通过 XML 路径表达式定位可以根据属性、文本和元素之间的层级关系定位。driver.find_element(id, username) driver.find_element(name, password) driver.find_element(class name, login-btn) driver.find_element(tag name, input) driver.find_element(link text, 登录) driver.find_element(partial link text, 登) driver.find_element(css selector, #username) driver.find_element(xpath, //input[idusername])Web 自动化测试中常用的元素定位方法有 8 种id、name、class name、tag name、link text、partial link text、CSS Selector 和 XPath。一般优先选择 id 定位因为通常比较稳定如果没有合适的 id可以考虑 CSS Selector 或 XPath。定位时要尽量选择稳定、唯一的元素属性提高脚本的可维护性。Web 自动化中定位不到元素可能是什么原因导致的如何排查元素定位表达式错误检查 id、CSS Selector、XPath 等是否写错可以在浏览器开发者工具中验证。页面加载未完成元素还没出现就执行定位。可以使用显式等待等待元素出现或可点击。元素在 iframe 中需要先切换到对应的 iframe再定位元素。元素在新窗口或新标签页中需要先切换到对应窗口。元素是动态生成的元素属性可能发生变化需要重新检查定位表达式尽量使用稳定属性。元素被遮挡或不可交互可能被弹窗、遮罩层覆盖需要先关闭遮挡元素或等待其消失。元素在下方尚未进入可视区域可以尝试滚动页面再进行操作。常见原因有定位表达式错误、页面加载延迟、元素位于 iframe 中、窗口没有切换、元素属性动态变化以及元素被遮挡等。# 先切换到 iframe driver.switch_to.frame(login_frame) # 再定位用户名输入框 driver.find_element(id, username).send_keys(test) # 操作完成切回主网页 driver.switch_to.default_content()排查时我会先检查定位表达式是否正确再检查页面是否加载完成如果仍然定位不到就检查 iframe、窗口切换和元素属性等情况。必要时使用显式等待、重新定位元素或滚动页面来解决。记忆口诀定位、等待、框架、窗口、属性、遮挡。什么是 Web 自动化测试框架思维简单来说就是不只是让脚本跑通还要把脚本组织起来让它易维护、可复用、方便管理和执行。例如测试一个网站的登录功能。普通脚本思维把打开浏览器、输入账号密码、点击登录、判断结果等代码全部写在一起。框架思维把代码拆分成不同模块例如浏览器管理、元素操作、页面对象、测试用例、测试数据和测试报告等。这样后续测试注册、搜索等功能时就可以复用公共代码而不用重复编写。模块作用测试用例编写具体的测试步骤和断言页面对象PO封装页面元素和操作方法公共方法封装等待、点击等通用操作测试数据管理账号、密码等测试数据配置管理管理浏览器、环境等配置测试报告展示测试通过、失败等结果答我认为框架思维就是不只关注单个脚本能否运行还要考虑代码的可复用性、可维护性和可扩展性。实际设计时可以采用分层思想将测试用例、页面对象、公共方法、测试数据和测试报告等模块分离减少重复代码方便后续维护和扩展。记忆口诀分层设计、代码复用、方便维护、易于扩展。你们公司 Web 自动化框架的代码量是多少框架模块是如何划分的答我们项目的 Web 自动化框架代码量大约在几百行具体会根据业务需求不断调整。框架主要分为以下几个模块配置模块管理测试环境、浏览器等配置信息。公共方法模块封装元素定位、显式等待、点击、输入等通用操作。页面对象模块PO封装各个页面的元素和操作方法提高代码复用性。测试用例模块使用 Pytest 编写测试用例并通过断言判断测试结果。测试数据模块管理测试账号、密码等数据。测试报告模块生成测试报告方便查看用例执行结果和失败原因。另外我们会使用 Git 管理代码并根据需要接入 Jenkins实现自动化测试的定时执行和持续集成。Web 自动化框架常用的 Python 库有哪些你自己主要使用过哪些库主要作用Selenium控制浏览器执行 Web UI 自动化测试Pytest组织和运行测试用例进行断言Requests发送 HTTP 请求辅助接口测试openpyxl读取和写入 Excel 测试数据PyYAML读取 YAML 格式的配置和测试数据Allure生成测试报告展示用例执行结果logging记录测试日志方便排查问题答常用的有 Selenium、Pytest、Requests、openpyxl、PyYAML、Allure 和 logging 等。我主要使用 Selenium 进行浏览器操作使用 Pytest 编写和组织测试用例通过断言判断测试结果使用 PyYAML 管理测试数据和配置并通过 Allure 生成测试报告。Requests 主要用于接口自动化测试。POM页面对象模型分层架构的设计思维和作用是什么POMPage Object Model页面对象模型是一种 Web UI 自动化测试的设计模式。它的核心思想是一个页面对应一个页面类把页面元素定位和页面操作封装在页面类中测试用例负责调用这些方法并验证结果。页面对象层login_page.pyclass LoginPage: def __init__(self, driver): self.driver driver def login(self, username, password): self.driver.find_element(id, username).send_keys(username) self.driver.find_element(id, password).send_keys(password) self.driver.find_element(id, login).click()测试用例层test_login.pydef test_login(driver): page LoginPage(driver) page.login(test, 123456) assert 首页 in driver.title测试用例直接调用login()不需要重复编写元素定位和输入操作。POM 是一种页面对象设计模式核心思想是将页面元素定位和操作方法封装在页面类中测试用例负责调用页面方法并进行断言。它可以降低代码重复实现页面操作与测试逻辑分离提高自动化测试代码的可维护性、复用性和扩展性。记忆口诀页面操作放页面类测试流程放测试用例减少重复方便维护。如何优化 Web 自动化测试脚本的执行性能与速度合理使用等待机制使用显式等待代替固定的sleep()避免无效等待。减少浏览器操作复用浏览器会话减少重复打开和关闭浏览器的次数。优化元素定位优先使用稳定、唯一的定位方式减少复杂的 XPath 查询。减少重复代码使用 POM 模式封装公共操作避免重复执行相同步骤。并行执行测试用例使用pytest-xdist等工具并行运行相互独立的用例。合理选择测试范围优先执行冒烟测试和高优先级用例避免每次都运行全部用例。优化测试数据准备提前准备数据避免每条用例都重复创建相同数据。答我主要从几个方面优化首先使用显式等待代替固定等待减少不必要的时间消耗其次优化元素定位复用浏览器会话减少重复操作然后通过 POM 模式封装公共方法减少重复代码最后对于相互独立的测试用例可以使用 Pytest 的pytest-xdist插件进行并行执行同时合理安排测试范围提高整体执行效率。如何设计有效的 Web 自动化测试用例明确测试目标根据需求文档确定需要验证的功能和业务流程。覆盖核心业务优先覆盖登录、注册、下单等核心功能。考虑多种场景使用等价类、边界值等方法设计正常、异常和边界场景。明确预期结果每条用例都要有清晰的检查点通过断言验证实际结果。保证用例稳定性使用稳定的元素定位方式、显式等待和独立的测试数据减少偶发失败。提高用例复用性采用 POM 模式封装页面操作避免重复编写代码。合理选择自动化范围优先自动化重复执行频率高、流程稳定、收益较大的用例。答首先根据需求分析核心业务流程优先覆盖重要且稳定的功能其次结合等价类、边界值等测试方法设计正常、异常和边界场景然后明确每条用例的预期结果通过断言验证测试结果最后采用 POM 模式提高代码复用性并优先自动化重复执行频率高、收益较大的用例。请简述 Web 自动化测试的优点与缺点。提高测试效率脚本可以自动执行减少人工重复操作。提高回归测试效率修改代码后可以快速重复执行测试用例。减少人为错误按照固定脚本执行测试结果更稳定。支持持续集成可以集成 Jenkins 等工具实现自动执行和结果反馈。前期成本较高需要编写脚本、搭建框架和准备测试环境。维护成本较高页面元素或业务流程变化时可能需要修改脚本。无法完全替代手工测试探索性测试、用户体验测试等仍需要人工参与。存在误报问题网络波动、等待不合理或环境异常都可能导致用例失败。答优点主要是提高测试效率、方便回归测试、减少重复劳动并且可以集成到持续集成流程中。缺点是前期开发成本较高脚本需要持续维护而且无法完全替代手工测试。实际项目中我会优先对核心业务和重复执行频率高的功能进行自动化测试。记忆口诀优点是提效、回归、集成缺点是成本、维护、不能完全替代手工。