临沂网站建设wyjzgzs营销型网站开发营销
2026/2/20 15:03:16 网站建设 项目流程
临沂网站建设wyjzgzs,营销型网站开发营销,西安seo外包优化,代理记账公司哪家好#x1f345; 点击文末小卡片 #xff0c;免费获取软件测试全套资料#xff0c;资料在手#xff0c;涨薪更快 今天#xff0c;我们来聊聊 Web UI 自动化测试中的 POM 设计模式。 为什么要用 POM 设计模式 前期#xff0c;我们学会了使用 PythonSelenium 编写 Web UI …点击文末小卡片免费获取软件测试全套资料资料在手涨薪更快今天我们来聊聊 Web UI 自动化测试中的 POM 设计模式。为什么要用 POM 设计模式前期我们学会了使用 PythonSelenium 编写 Web UI 自动化测试线性脚本线性脚本以快递 100 网站登录举栗PYTHON1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16import time from selenium import webdriver from selenium.webdriver.common.by import By driver webdriver.Chrome() driver.get(https://sso.kuaidi100.com/sso/v2/authorize.do) driver.maximize_window() driver.find_element(By.ID, name).send_keys(***********) driver.find_element(By.ID, password).send_keys(***********) driver.find_element(By.ID, submit).click() time.sleep(2) text driver.find_element(By.PARTIAL_LINK_TEXT, 首页).text assert text 首页 driver.close()使用以上代码最基础最简单的 Web UI 自动化测试就做起来了但是问题也随之而来线性脚本的缺点也暴露出来了Web UI 自动化测试简单来说就是模拟人在浏览器上的操作打开浏览器 - 定位元素 - 操作元素 - 模拟页面动作 - 断言结果由于线性脚本中的元素定位、元素操作细节、测试数据、结果验证断言是捆绑在一起的代码会显得非常冗余、可读性差、不可复用、工作量大且可维护性差刚开始少数的测试用例维护起来可能很容易但随着时间迁移、产品迭代、测试套件持续增长脚本也越来越臃肿可能需要维护几十个页面且很多页面是公用的元素的任何改变都会让我们的脚本变得繁琐复杂、耗时易出错。例如十几个用例中都用到了 A 元素某一天 A 元素被前端改成了 B 元素我们就需要去十几个用到 A 元素的地方将 A 元素修改为 B 元素如果可以把公共元素抽取出来即使元素被前端修改我们也只需更新元素的定位方式而不用修改每条测试用例无论多少用例用到该元素都只需修改元素定位方式重新获取元素即可所以我们引入了 PageObject 这种解决方案它可以帮我们解决设计上的问题可以将 testcase 和 page 分层形成一个非常好的结果什么是 POM 设计模式POMPage Object Model页面对象模型的简称2013 年由 Martin Fowler提出了Page Object的观点作者的观点是一种封装思想旨在为每个待测页面创建一个页面对象从而将繁琐的定位操作、操作细节封装到这个页面对象中对外只提供必要的操作接口在调用的时候只调用提供的接口不用去调用操作细节最终实现程序的高内聚低耦合使程序模块的可重用性、移植性大大增强在这种模式下对于应用程序中的每个页面都应该有相应单独的页面类例如login_page、userinfo_page类中应该包含此页面上的元素对象和操作这些元素对象所需要的方法再将流程所关联的页面作为对象将对象串联起来形成不同的业务流程例如在登录页面完成登录操作后跳转到用户中心页面进行个人信息的修改Selenium 官方对 PageObject 的引入历史简介2015 年Selenium 官方对 PageObject 进行引入2020 年Selenium 更新文档地址PageObject 六大原则The public methods represent the services that the page offers用公共方法表示页面提供的服务例如登录页面有用户名输入框、密码输入框、登录按钮于是就可以用 input_username () 代表输入用户名、用 input_password () 代表输入密码、用 click_submit () 代表点击登录按钮Try not to expose the internals of the page尽量不要暴露页面的内部信息将操作细节封装成方法对外只提供对应的方法供调用Generally don’t make assertions一般不使用断言断言要和 Page 代码分开不要将断言写在 PageObject 层Methods return other PageObjects方法返回其他 PageObjects例如首页有个方法是点击登录图标跳转到登录页面因此这个方法应该返回 login_pageNeed not represent an entire page不需要表示整个页面不需要对页面中的每一个元素进行建模只需要关注我们需要用到的元素。例如登录页面除了账号密码登录还有快捷登录、手机短信登录、扫码登录等Different results for the same action are modelled as different methods同一行为的不同结果可以用不同的方法来模拟例如对一个页面进行操作可能出现正确的结果或者错误的结果可以为这两种不同的结果分别创建两个不同的方法POM 框架开源代码请点击文末小卡片获取basebase_page基类定义项目所需的基础方法对 Selenium 一些常用的 api 进行二次封装如find_element、click、send_keys、screenshot、调用 JavaScript 脚本的方法以及其他与浏览器相关的操作为什么要有基类由于每个页面都会频繁使用这些方法若单纯使用 Selenium 原始 api可能遇到一些问题例如某个按钮未加载完成但已触发了点击事件导致元素定位不到而报错。这时就可以对原始 api 进行二次封装如加入等待时间、对异常进行捕获并打印日志等之后所有的 PageObject 都继承 BasePage 类后续只需要调用这些封装好的方法增强复用性假设以后不使用 Selenium 这个框架就只需要修改 BasePage 中的方法不用去修改具体的测试用例业务代码pagespage_object页面对象层也是 PO 的核心层继承 BasePage管理页面元素以及操作元素的方法将操作元素的动作写成方法cases测试用例层用于管理测试用例这里会用到单元测试框架如Pytest、Unittest。data测试数据层用于测试数据的管理数据与脚本分离降低维护成本提高可移植性如yml 文件数据config配置文件层存放整个项目需要用到的配置项如URL、数据库信息等utilsCommonUtil公共模块将一些公共函数、方法以及通用操作进行封装如日志模块、yaml 操作模块、时间模块等run.py批量执行测试用例的主程序根据不同需求不同场景进行组装遵循框架的灵活性和扩展性logs日志模块用于记录和管理日志针对不同情况设置不同的日志级别方便定位问题reports测试报告层用于测试报告的生成和管理如基于 Allure 生成的定制化报告最后下方这份完整的软件测试视频教程已经整理上传完成需要的朋友们可以自行领取【保证100%免费】​​​软件测试面试文档我们学习必然是为了找到高薪的工作下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料并且有字节大佬给出了权威的解答刷完这一套面试资料相信大家都能找到满意的工作。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询