当前位置: 首页 > news >正文

Net网站开发多少钱wordpress首页调用图片不显示

Net网站开发多少钱,wordpress首页调用图片不显示,咨询公司的企业文化,门户网站开发研究报告UI自动化测试框架设计#xff1a;从项目结构到Base-Page层的最佳实践全面解析UI自动化测试项目的架构设计与实现细节#xff0c;构建可维护的测试框架在现代软件开发中#xff0c;UI自动化测试已成为确保产品质量的重要环节。一个良好的项目结构和合理的设计模式能够显著提高…UI自动化测试框架设计从项目结构到Base-Page层的最佳实践全面解析UI自动化测试项目的架构设计与实现细节构建可维护的测试框架在现代软件开发中UI自动化测试已成为确保产品质量的重要环节。一个良好的项目结构和合理的设计模式能够显著提高测试代码的可维护性和扩展性。本文将深入探讨UI自动化测试项目的整体结构设计以及Base层与Page层的详细实现。️ 整体项目结构设计 项目结构全景视图 #mermaid-svg-2knoSHGXolX2JXXW {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-2knoSHGXolX2JXXW .error-icon{fill:#552222;}#mermaid-svg-2knoSHGXolX2JXXW .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-2knoSHGXolX2JXXW .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-2knoSHGXolX2JXXW .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-2knoSHGXolX2JXXW .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-2knoSHGXolX2JXXW .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-2knoSHGXolX2JXXW .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-2knoSHGXolX2JXXW .marker{fill:#333333;stroke:#333333;}#mermaid-svg-2knoSHGXolX2JXXW .marker.cross{stroke:#333333;}#mermaid-svg-2knoSHGXolX2JXXW svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-2knoSHGXolX2JXXW .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-2knoSHGXolX2JXXW .cluster-label text{fill:#333;}#mermaid-svg-2knoSHGXolX2JXXW .cluster-label span{color:#333;}#mermaid-svg-2knoSHGXolX2JXXW .label text,#mermaid-svg-2knoSHGXolX2JXXW span{fill:#333;color:#333;}#mermaid-svg-2knoSHGXolX2JXXW .node rect,#mermaid-svg-2knoSHGXolX2JXXW .node circle,#mermaid-svg-2knoSHGXolX2JXXW .node ellipse,#mermaid-svg-2knoSHGXolX2JXXW .node polygon,#mermaid-svg-2knoSHGXolX2JXXW .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-2knoSHGXolX2JXXW .node .label{text-align:center;}#mermaid-svg-2knoSHGXolX2JXXW .node.clickable{cursor:pointer;}#mermaid-svg-2knoSHGXolX2JXXW .arrowheadPath{fill:#333333;}#mermaid-svg-2knoSHGXolX2JXXW .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-2knoSHGXolX2JXXW .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-2knoSHGXolX2JXXW .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-2knoSHGXolX2JXXW .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-2knoSHGXolX2JXXW .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-2knoSHGXolX2JXXW .cluster text{fill:#333;}#mermaid-svg-2knoSHGXolX2JXXW .cluster span{color:#333;}#mermaid-svg-2knoSHGXolX2JXXW div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-2knoSHGXolX2JXXW :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}UI自动化测试项目核心代码层测试用例层资源文件层输出报告层脚本工具层文档层页面对象模块业务动作模块通用组件模块工具类模块按业务域组织测试固件环境配置测试数据图像资源HTML报告Allure报告执行日志运行脚本CI/CD配置设计文档编码规范 完整项目目录结构 ui-automation-project/ ├── README.md # 项目说明文档 ├── requirements.txt # Python依赖列表 ├── .gitignore # Git忽略配置 ├── src/ # 核心源代码 │ ├── pages/ # 页面对象层 │ │ ├── base_page.py # 页面基类 │ │ ├── login_page.py # 登录页面 │ │ └── home_page.py # 首页页面 │ ├── actions/ # 业务动作层 │ │ └── login_actions.py # 登录业务流程 │ ├── components/ # 通用组件 │ │ └── header.py # 页面头部组件 │ └── utils/ # 工具类 │ ├── driver_factory.py # 驱动工厂 │ ├── config.py # 配置管理 │ ├── logger.py # 日志工具 │ └── wait_utils.py # 等待工具 ├── tests/ # 测试用例 │ ├── conftest.py # pytest配置 │ ├── login/ # 登录模块测试 │ └── order/ # 订单模块测试 ├── resources/ # 资源文件 │ ├── config/ # 配置文件 │ │ ├── dev.yaml # 开发环境 │ │ └── prod.yaml # 生产环境 │ ├── testdata/ # 测试数据 │ └── images/ # 图片资源 ├── reports/ # 测试报告 │ ├── html/ # HTML报告 │ ├── allure_raw/ # Allure原始数据 │ └── logs/ # 运行日志 └── scripts/ # 脚本工具├── run.py # 运行脚本└── docker_run.sh # Docker脚本各层级的职责与内容 项目各模块职责划分模块职责说明示例文件变化频率pages/封装页面元素和操作login_page.py中actions/封装业务流程login_actions.py中components/封装可复用UI组件header.py低utils/提供工具函数driver_factory.py低tests/存放测试用例test_login.py高resources/存储测试资源dev.yaml, testdata/中reports/输出测试结果html/, logs/高Base层与Page层的详细设计 Base层与Page层的关系 #mermaid-svg-i1uz3jNJMYhkP46S {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-i1uz3jNJMYhkP46S .error-icon{fill:#552222;}#mermaid-svg-i1uz3jNJMYhkP46S .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-i1uz3jNJMYhkP46S .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-i1uz3jNJMYhkP46S .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-i1uz3jNJMYhkP46S .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-i1uz3jNJMYhkP46S .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-i1uz3jNJMYhkP46S .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-i1uz3jNJMYhkP46S .marker{fill:#333333;stroke:#333333;}#mermaid-svg-i1uz3jNJMYhkP46S .marker.cross{stroke:#333333;}#mermaid-svg-i1uz3jNJMYhkP46S svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-i1uz3jNJMYhkP46S .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-i1uz3jNJMYhkP46S .cluster-label text{fill:#333;}#mermaid-svg-i1uz3jNJMYhkP46S .cluster-label span{color:#333;}#mermaid-svg-i1uz3jNJMYhkP46S .label text,#mermaid-svg-i1uz3jNJMYhkP46S span{fill:#333;color:#333;}#mermaid-svg-i1uz3jNJMYhkP46S .node rect,#mermaid-svg-i1uz3jNJMYhkP46S .node circle,#mermaid-svg-i1uz3jNJMYhkP46S .node ellipse,#mermaid-svg-i1uz3jNJMYhkP46S .node polygon,#mermaid-svg-i1uz3jNJMYhkP46S .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-i1uz3jNJMYhkP46S .node .label{text-align:center;}#mermaid-svg-i1uz3jNJMYhkP46S .node.clickable{cursor:pointer;}#mermaid-svg-i1uz3jNJMYhkP46S .arrowheadPath{fill:#333333;}#mermaid-svg-i1uz3jNJMYhkP46S .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-i1uz3jNJMYhkP46S .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-i1uz3jNJMYhkP46S .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-i1uz3jNJMYhkP46S .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-i1uz3jNJMYhkP46S .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-i1uz3jNJMYhkP46S .cluster text{fill:#333;}#mermaid-svg-i1uz3jNJMYhkP46S .cluster span{color:#333;}#mermaid-svg-i1uz3jNJMYhkP46S div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-i1uz3jNJMYhkP46S :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}BasePage基类LoginPageHomePage其他页面类登录页面元素登录页面方法首页页面元素首页页面方法 Base层与Page层职责对比特性Base层BasePagePage层具体页面类职责提供通用页面操作方法封装具体页面元素和业务操作内容框架级别的通用功能页面特定的元素定位和操作变化频率低相对稳定中随页面变化而调整继承关系通常继承自object继承自BasePage复用性高所有页面共享中特定页面使用BasePage基类核心实现 class BasePage:所有页面对象的基类封装通用页面操作def __init__(self, driver):self.driver driverself.timeout 30# 元素操作相关方法def find_element(self, locator, timeoutNone):查找单个元素显式等待timeout timeout or self.timeoutreturn WebDriverWait(self.driver, timeout).until(EC.presence_of_element_located(locator))def click(self, locator, timeoutNone):点击元素element self.find_element(locator, timeout)element.click()def input_text(self, locator, text, timeoutNone):输入文本element self.find_element(locator, timeout)element.clear()element.send_keys(text)# 页面导航相关方法def get_current_url(self):获取当前页面URLreturn self.driver.current_urldef refresh_page(self):刷新页面self.driver.refresh()# 更多通用方法...具体页面类实现示例 class LoginPage(BasePage):登录页面对象# 元素定位器USERNAME_INPUT (By.ID, username)PASSWORD_INPUT (By.ID, password)LOGIN_BUTTON (By.ID, loginBtn)ERROR_MESSAGE (By.CLASS_NAME, error-message)def __init__(self, driver):super().__init__(driver)self.url https://example.com/logindef open(self):打开登录页面self.driver.get(self.url)return selfdef enter_username(self, username):输入用户名self.input_text(self.USERNAME_INPUT, username)return selfdef enter_password(self, password):输入密码self.input_text(self.PASSWORD_INPUT, password)return selfdef click_login(self):点击登录按钮self.click(self.LOGIN_BUTTON)from .home_page import HomePage # 避免循环导入return HomePage(self.driver)def login_with_credentials(self, username, password):使用凭据登录业务流程封装return (self.open().enter_username(username).enter_password(password).click_login())项目结构演进策略 阶段一最小可行产品第1-3天 目标快速跑通主业务流程 project/ └── tests/└── checkout_flow/ # 主业务流程├── __init__.py├── fixtures.py # 专用测试固件└── test_checkout.py # 核心测试用例特点 直接在使用例中编写自动化代码不需要抽象分层快速验证业务流程 阶段二模块化扩展第1周 目标支持多个业务模块 project/ └── tests/├── checkout_flow/ # 现有流程├── order/ # 新订单模块│ ├── __init__.py│ ├── fixtures.py│ ├── test_order_list.py│ └── test_cancel_order.py└── payment/ # 支付模块├── __init__.py├── fixtures.py├── test_pay_success.py└── test_pay_fail.py阶段三代码抽象与复用第3周 目标消除重复代码提高复用性 project/ └── tests/├── checkout_flow/├── order/│ ├── pages/ # 模块专用页面对象│ │ ├── order_list_page.py│ │ └── order_detail_page.py│ ├── actions/ # 模块专用业务动作│ │ └── cancel_action.py│ ├── fixtures.py│ └── test_*.py├── payment/│ ├── pages/│ │ └── payment_page.py│ ├── actions/│ │ └── pay_action.py│ ├── fixtures.py│ └── test_*.py└── shared/ # 跨模块共享代码├── driver.py└── config.py最佳实践总结 1. 分层设计原则层级职责变化频率设计原则测试用例业务验证高保持简洁只包含断言和业务调用页面对象元素封装中封装页面细节提供业务方法工具类基础能力低提供稳定可靠的底层支持2. 代码组织策略3. 设计模式应用 页面工厂模式 class PageFactory:页面工厂统一管理页面对象创建def __init__(self, driver):self.driver driverself._pages {}def get_page(self, page_class):获取页面实例单例模式if page_class not in self._pages:self._pages[page_class] page_class(self.driver)return self._pages[page_class]组件化设计 class BaseComponent(BasePage):基础组件类def __init__(self, driver, container_locator):super().__init__(driver)self.container container_locatordef find_in_container(self, locator):在容器内查找元素container self.find_element(self.container)return container.find_element(*locator)✅ 总结 构建优秀的UI自动化测试项目需要综合考虑项目结构和代码设计 合理的项目结构是维护性的基础应该按业务域组织代码而不是技术类型Base-Page模式是UI自动化的核心通过合理的职责划分提高代码复用性渐进式演进允许项目随着需求增长而自然优化避免过度设计设计模式应用如工厂模式和组件化设计能够进一步提高代码质量 通过本文介绍的项目结构设计和Base-Page层实现方案你可以构建出健壮、可维护、可扩展的UI自动化测试框架显著提高测试代码的质量和开发效率。 记住最好的项目结构不是一开始就设计出来的而是在项目演进过程中不断优化形成的。始终保持代码的简洁性和可维护性让自动化测试成为软件开发的有力支撑而不是负担。
http://www.zqtcl.cn/news/346111/

相关文章:

  • 天津网站建设班模拟网站建设软件有哪些
  • 服务类的网站怎么做做软件的网站担保网站
  • 最新电子产品网站模板海口网站排名提升
  • 北京社保网站减员怎么做phpcms v9 实现网站搜索
  • 视频运营管理网站济南网站建设 济南货梯
  • html电影网站模板下载工具阿里云网站建设 部署与发布笔记
  • 建设跨境网站微信seo是什么意思
  • 我做彩票网站开发彩票网站搭建织梦如何仿手机网站源码下载
  • 东仓建设网站手机便宜的网站建设
  • 吕梁市住房与城乡建设厅网站wordpress 乐趣公园
  • 沈阳正规制作网站公司吗德成建设集团有限公司网站
  • 做网站标准步骤大学两学一做专题网站
  • 如何在手机上做网站Windows怎么建设网站
  • 专门做稀有产品的网站海口网站制作设计
  • 怎么查看自己的网站是否被百度收录网站的设计制作流程
  • 视觉设计网站芜湖做网站找哪家好
  • flash网站源码带asp后台电子商务有限公司网站
  • 一个网站有多少网页简单的logo设计
  • 重庆专业网站营销长春建站免费模板
  • 企业建设网站多少钱爱的网站歌曲
  • 宁波网站优化如何欣宝儿在什么网站做直播
  • 东营网签查询系统官方网站超炫的网站模板
  • 请人做网站谁来维护南宁营销型网站设计
  • 汕头做网站的公司西安建筑科技大学华清学院教务网
  • 免费行情网站在线石家庄正规制作网站公司
  • 站长工具网凡科网商城
  • 网站开发工程师需要会写什么区别沈阳网站建设建设公司哪家好
  • 营销型网站建设的优缺点利用海康威视做直播网站
  • 阿里手机网站开发框架怎么看网站被降权
  • 电视台做网站还是APP网络推广是什么意思